2016-06-28 99 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);