![](/img/trans.png)
[英]in javascript, call each function in array with a callback using forEach?
[英]using forEach to apply a function to each array item in javascript
我试图了解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]
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);
工作演示: http : //jsfiddle.net/jfriend00/C226B/
那是因为你没有在任何变量中收集结果。 变量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.
item
是一个局部变量,赋值给它不会改变数组。 要修改数组,您必须分配给属性arr[i]
,例如
arr.forEach(function(item, i) {
arr[i] = square(item);
});
但是,您真正想要做的是一个不会修改任何内容的map
,而是生成一个新的结果数组:
new_arr = arr.map(square);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.