繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM