应该用forEach改变数组的值吗

189 阅读1分钟

由于js中的数组是引用类型,所以可以利用类似指针的特性通过改变另一个变量去修改原始的值。我认为这其实是js中的缺陷,所以我不喜欢利用这个"缺陷"去实现一些功能,在最近的一次code review中,同事指出了这个问题。所以我希望有更多朋友能给我一些建议。

下面就是简单的例子。

let arr = [{
    a:1,
    b:2,
}, {
    a:3,
    b:4,
}];

如果有以上数组,我需要将每一项的a改为3。大概有两种写法,一种是用forEach,另一种是用map来返回一个新数组(暂不考虑for循环)。

forEach:

arr.forEach((item) => {
    item.a = 3; 
});

map:

arr = arr.map((item) => {   //  有同事指出应该声明一个新变量来存储map的结果,这个建议我认为是对的。
    item.a = 3;
    return item;
});