[英]JavaScript Array forEach function not working?
我嘗試在W33學校的javascript代碼中做一些更改,以了解forEach和map之間的區別,有沒有人可以告訴我為什么output仍然是這個代碼:
45,4,9,16,25
代替
90,8,18,32,50
是不是 forEach 意味着對這個數組中的每個元素調用一個 function ? 我知道我不應該使用 return 因為 forEach 不返回有效結果。
const numbers = [45, 4, 9, 16, 25]; numbers.forEach(myFunction); document.getElementById("demo").innerHTML = numbers; function myFunction(value, index, array) { value * 2; }
<.DOCTYPE html> <html> <body> <h2>JavaScript Array.forEach()</h2> <p>Calls a function once for each array element.</p> <p id="demo"></p> </body> </html>
line value * 2
執行計算,但它不對該計算的結果做任何事情。 您可以將該行更改為value = value * 2
並將計算結果分配給value
變量。 但是,這仍然不會更改數組中的值,因為value
變量僅限於 function 的 scope。
這是因為當您將一個數字傳輸到另一個變量時,您只是在傳輸值,而不是引用。 IE
let a = 1;
let b = a;
a = 2; // a is 2, b is 1
這與傳輸引用的 arrays 和對象不同:
let a = [1];
let b = a;
a[0] = 2; // a[0] is 2, b[0] is 2
因此,修復代碼的一種方法可能是操作數組,即
numbers.forEach(myFunction);
function myFunction(value, index, array) {
array[index] = value * 2;
}
這行得通。 但是,我會推薦map
而不是forEach
的簡單性。 Array#map
使用每個 function 調用的返回值來替換數組中的每個項目。
numbers.map(myFunction);
function myFunction(value, index, array) {
return value * 2;
}
function myFunction
基本上什么都不做,它將當前值加倍並且什么都不做。 在您的情況下,您需要改變數組。 但是改變你正在遍歷的數組並不是一個好主意。
為了實現您的目標,我建議使用map
function 創建一個新陣列。
const numbers = [45, 4, 9, 16, 25];
const doubledNumbers = numbers.map((value) => val * 2); // [90, 8, 18, 32, 50]
document.getElementById("demo").innerHTML = doubledNumbers;
這是因為您沒有用相乘的值重新設置數字的值。
您需要根據 map function 中的numbers[index]
進行設置。
const numbers = [45, 4, 9, 16, 25];
numbers.forEach(myFunction);
document.getElementById("demo").innerHTML = numbers;
function myFunction(value, index, array) {
numbers[index] = value * 2;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.