2016-06-28 73 views
1

需要用数组中的“#”替换值“y”,并且还需要计算数组中的“y”值。替换数组中的元素

x = ['a','b','c']; 
z = ['z','y','y']; 

var a = x.concat(z); 
var b = a.sort(); 
var count = 0; 
for(var i = 0; i < b.length; i++){ 
    if(b[i] == "y") { 
      b['y'] == "#"; 
     var c = count++; 
    } 
} 
console.log(b); 
console.log(c+1); 

Fiddle

+1

'B [ 'Y'] =='应该是'B [I] ='。 – nnnnnn

+1

'b ['y']'应该是'b [i]',当你设置'b [i]'时,你应该用'='而不是'==' – hsh

+0

不要忘记使用'var'在声明所有新变量之前,btw – naomik

回答

3

==是比较运算符 =被赋值运算符

更改为这样:

for(var i = 0; i < b.length; i++){ 
    if(b[i] == "y") { 

B [I] = “#”;

 var c = count++; 
    } 
} 

for(var i = 0; i < b.length; i++){ 
    if(b[i] == "y") { 

B [ 'Y'] == “#”;

 count++; 
    } 
} 

x = ['a', 'b', 'c']; 
 
z = ['z', 'y', 'y']; 
 

 
var a = x.concat(z); 
 
var b = a.sort(); 
 
var count = 0; 
 
for (var i = 0; i < b.length; i++) { 
 
    if (b[i] == "y") { 
 
    b[i] = "#"; 
 
    count++; 
 
    } 
 
} 
 
console.log(b); 
 
console.log(count);

4
  • 声明所有变量
  • 分配权值,不作比较b[i] = "#";
  • 使用count变量,而不是c
  • 不需要使用b,因为sort对给定数组进行排序。

var x = ['a', 'b', 'c']; 
 
var z = ['z', 'y', 'y']; 
 
var a = x.concat(z); 
 
var count = 0; 
 

 
a.sort(); 
 
for (var i = 0; i < a.length; i++){ 
 
    if (a[i] == "y") { 
 
     a[i] = "#"; 
 
     count++; 
 
    } 
 
} 
 
console.log(a); 
 
console.log(count);

2

您还可以使用Array#map

var x = ['a','b','c']; 
 
var z = ['z','y','y']; 
 

 
var a = x.concat(z); 
 
var b = a.sort(); 
 
var count = 0; 
 

 
b = b.map(function(v) { 
 
    if(v == 'y') { 
 
    count++; 
 
    return '#'; 
 
    } else { 
 
    return v; 
 
    } 
 
}); 
 

 
console.log(b); 
 
console.log(count);

1

我不知道,但是这是你想要的吗?

x = ['a','b','c']; 
 
z = ['z','y','y']; 
 

 
var a = x.concat(z); 
 
var b = a.sort(); 
 
var count = 0; 
 
for(var i = 0; i < b.length; i++){ 
 
    if(b[i] == "y") { 
 
    \t \t b[i] = "#"; 
 
     var c = count++; 
 
    } 
 
} 
 
console.log(b); 
 
console.log(c+1);

jsfiddle

4

您可以使用reduce与解构赋值有效地返回2个值

var x = ['a','b','c'] 
 
var z = ['z','y','y'] 
 
var a = x.concat(z) 
 
var [count, b] = a.reduce(([count,b],x)=> { 
 
    if (x === 'y') 
 
    return [count + 1, [...b, '#']] 
 
    else 
 
    return [count, [...b, x]] 
 
}, [0, []]) 
 

 
console.log(count) // 2 
 
console.log(b)  // ['a', 'b', 'c', 'z', '#', '#']


如果你真的想在替换'y'之前将数组排序并得到计数,你应该知道Array.prototype.sort会改变原始数组。另外,将一个数组赋值给一个变量是通过引用。

所以,当你写这个...

var b = a.sort(); 

你应该知道,a进行排序,并b只是第二参考完全相同的阵列。 b不是单独的副本。

如果你想制作一个单独的副本,你可以如果你是较少的代码行的粉丝,那么这一条线(或者两个线)实施将做到这一点

// make B a sorted copy of A. do not modify A. 
var b = a.slice(0).sort(); 
1

显。 ;)


我的回答的主要原因是关于排序返回值。 如documentation提到:

排序()方法代替排序数组的元素,并返回 阵列。排序不一定稳定。默认排序顺序 根据字符串Unicode代码点。

所以sort()方法做到位返回结果(阵列)过的动作。

var x = ['a', 'b', 'c'], 
 
    z = ['z', 'y', 'y'], 
 
    toReplace = 'y', 
 
    replaceWith = '#', 
 
    count = 0; 
 

 
var result = x.concat(z).sort() 
 
    .map((v, i, a) => v === toReplace ? ++count && replaceWith : v); 
 

 
console.log(result, count);