我想为每个循环更改当前对象并且它不起作用,为什么它不起作用,我该怎么做?
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item) {
item = {somethingElse: 1}
});
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 36
它不起作用,因为你所做的只是更新你给出的参数的值(item),它没有与数组的实时连接.一旦您的回调返回,该更改就会消失.
最合适的方法是使用map:
var arr = [{num: 1}, {num: 2}];
arr = arr.map(function(item) {
return {somethingElse: 1};
});
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
map为每个项目提供函数,并根据您返回的内容构建一个新数组.
如果您必须就地更新阵列而不是构建新阵列,那么您可以使用forEach,您只需要分配回您正在更新的数组元素.forEach回调的第二个参数是您正在访问的索引,因此:
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item, index) {
arr[index] = {somethingElse: 1};
});
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
当然,在上面两种情况下,你实际上都在使用item某些东西,你不在你的示例代码中......如果你想要添加/删除属性item,而不是完全替换对象,Cyril的答案会告诉你如何要做到这一点.
答案列表的另一个变种
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item) {
item.something = 2;//setting the value
delete item.num;//deleting the num from the object
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23609 次 |
| 最近记录: |