2017-08-17 227 views
1

*使用現有test變量,寫一個forEach循環 *,增加了100各由3 * *需要注意的事項是整除數變化的變量: * - 您必須使用一個if聲明驗證碼可被3整除的Javascript如果foreach語句

我很困惑,爲什麼我的代碼不工作?

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 
19, 300, 3775, 299, 36, 209, 148, 169, 299, 
6, 109, 20, 58, 139, 59, 3, 1, 139 
]; 

test.forEach(function(number) { 
if (number % 3 === 0) { 
    number += 100; 

}); 


console.log(test[0]); **this is returning 12, NOT the desired 112** 
+0

添加100到該函數內編號的數組中不改變相關項目。您需要替換它。 – kaveh

+0

它會改變它的值,如果它是一個引用,請參閱https://stackoverflow.com/questions/13266616/primitive-value-vs-reference-value(儘管這會改變你的數組,所以與你的問題有點無關,但可能有用的信息) –

回答

4

您不會放回數組中的數字。

基元不是引用。您需要使用索引並將其放回。

test.forEach(function(number,index) { 
if (number % 3 === 0) { 
    number += 100; 
    test[index] = number; 
}); 
+0

或者如果你想讓回調更通用,你可以使用所有三個回調參數:'function(number,index,array)',然後'array [index] = ...'。 (所以回調不需要知道'test'變量。) – nnnnnn

+0

@kaveh啊。真正。糾正。感謝您指出。 –

+0

感謝大家的幫助!我剛加入S.O.並且您的直接響應非常受歡迎。我非常感激。 –

0

您需要在for-each循環中包含索引。並使用該索引更改實際數組中的值。

工作代碼:

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 
19, 300, 3775, 299, 36, 209, 148, 169, 299, 
6, 109, 20, 58, 139, 59, 3, 1, 139 
]; 

test.forEach(function(number, i) { 
if (number % 3 === 0) { 
    test[i] += 100; 

} 
}); 


console.log(test[0]); //print 112 
0

正如其他人所說,你需要設置從哪個號碼念給值+ 100

JavaScript中的指數有很多不那麼直觀怪癖和函數參數不惜代價。看看這篇文章,瞭解如何使用Javascript傳遞給函數的值/引用一些詳細信息:https://stackoverflow.com/a/6605700/1690165

1

您可以編寫一個函數,並不需要訪問它的範圍喜歡這裏的一些其他的答案一樣,用forEach()「第三參數:

arr.forEach(function callback(currentValue, index, array) { ... 

let test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 
 
    19, 300, 3775, 299, 36, 209, 148, 169, 299, 
 
    6, 109, 20, 58, 139, 59, 3, 1, 139 
 
] 
 

 
test.forEach(function (number, index, array) { 
 
    if (number % 3 === 0) { 
 
    array[index] = number + 100 
 
    } 
 
}) 
 

 
console.log(test[0])

0

可以使用forloop/foreach:

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 
      19, 300, 3775, 299, 36, 209, 148, 169, 299, 
      6, 109, 20, 58, 139, 59, 3, 1, 139 ]; 

的foreach

foreach (int i in test) 
{ 
    if (i % 3 === 0) { 
     i += 100; 
    } 
} 

for循環

for (i = 0; i < test.Count; i++) 
{ 
    if (test[i] % 3 === 0) { 
     test[i] += 100; 
    } 
}