我想为每个循环更改当前对象,但它不起作用,为什么它不起作用,我该怎么做?
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item) {
item = {somethingElse: 1}
});
console.log(arr);
最佳答案
它不起作用,因为您所做的只是更新给定的参数 (item
) 的值,它与数组没有实时连接。一旦您的回调返回,该更改就会消失。
最合适的方法是使用 map
:
var arr = [{num: 1}, {num: 2}];
arr = arr.map(function(item) {
return {somethingElse: 1};
});
console.log(arr);
map
为您的函数提供每个项目,并根据您返回的任何内容构建一个新数组。
如果您就地更新数组而不是构建一个新数组很重要,您可以使用forEach
,您只需重新分配给数组元素你在更新。 forEach
的回调的第二个参数是您正在访问的索引,因此:
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item, index) {
arr[index] = {somethingElse: 1};
});
console.log(arr);
当然,在上面的两种情况下,您实际上是在使用 item
来做一些您不在示例代码中的事情...如果您想添加/删除 上的属性code>item
,不完全替换对象,Cyril's answer向您展示如何做到这一点。
关于javascript - Js为每个循环更改数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33479866/