JavaScript Map,Filter,redule,forEach不会更改原始数组。对?

时间:2017-02-17 16:01:32

标签: javascript

我一直在使用这些数组函数并知道这些不会改变原始数组。如果我错了,请纠正我。

这些功能对对象不起作用。

javascript中是否有可用于更改原始数组的内容。我知道工作是

arr = arr.map((val, index)=>{// change value here}); // I dont want to assign the aray it shelf

我想要像

这样的东西

arr.map((val, index)=>{// change value here}); // it should change the original array

3 个答案:

答案 0 :(得分:1)

这些方法都没有对每个元素产生副作用,因为JavaScript中的所有内容都是按值传递的。您可以自己修改项目,而不是修改数组中引用的内容。

如果你真的想要更改原始数组,传统的for循环可以做到这一点,或者只使用提供的index参数。

for (var i = 0; i <= arr.length; i++) {
  if (shouldReplace(i)) {
     arr[i] = newValue(i);
  }
}

答案 1 :(得分:0)

如果你不愿意像你提到的那样重新分配变量,并且你没有添加或删除元素,那么最好的选择是:

arr.forEach((val, index)=>{val.foo = bar;});

答案 2 :(得分:0)

map回调方法接受第三个参数,即原始数组。所以你可以从技术上做这样的事情:

&#13;
&#13;
var arr = ['apple', 'orange', 'banana', 'grape'];

arr.map((item, idx, org) => org[idx] = '1 ' + item);

console.log(arr);
&#13;
&#13;
&#13;