我想了解forEach如何在Javascript中运行
var arr = [5,4,3,2,1];
var square = function(x){
return x * x;
}
arr.forEach(function(item){
item = square(item);
});
我应该[25, 16, 9, 4, 1]
。但是得到[5, 4, 3, 2, 1]
答案 0 :(得分:3)
item
只是你的回调函数的一个参数(就像一个局部变量一样),修改它不会改变数组 - 它不是实际的数组元素。回调的下两个参数为您提供了数组和索引,因此您可以修改实际的数组元素。
var arr = [5,4,3,2,1];
var square = function(x){
return x * x;
}
arr.forEach(function(item, index, array){
array[index] = square(item);
});
工作演示:http://jsfiddle.net/jfriend00/L8598/
您可能需要注意.map()
用于为此类操作生成新数组:
var arr = [5,4,3,2,1];
var square = function(x){
return x * x;
}
var newArray = arr.map(square);
答案 1 :(得分:0)
那是因为你没有在任何变量中收集结果。变量item
正在本地功能范围内更改。要在外面获得结果,你必须在变量中收集它。
喜欢吼叫
var arr = [5,4,3,2,1];
var result = [];
var square = function(x){
return x * x;
}
arr.forEach(function(item){
item = square(item);//
result.push(item);
});
似乎您的上述情况map
是更好的解决方案
arr.map(square) //will return expected result.
答案 2 :(得分:0)
item
是一个局部变量,分配给它不会改变数组。要修改数组,您必须分配属性arr[i]
,例如
arr.forEach(function(item, i) {
arr[i] = square(item);
});
然而,你真正想做的是map
,它不会修改任何东西,但会生成一个新的结果数组:
new_arr = arr.map(square);