使用forEach将函数应用于javascript中的每个数组项

时间:2014-08-01 05:33:43

标签: 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]

3 个答案:

答案 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);

工作演示:http://jsfiddle.net/jfriend00/C226B/

答案 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);