JS forEach将数组内元素替换的问题
let arr = [
{ name: '1',
id: '1'
},{ name: '2',
id: '2'
},{ name: '3',
id: '3'
}
]
arr.forEach(item=>{
if(item.name==='2'){
item= {name: '4'}
}
})
console.log(arr)
[[object Object] {
id: "1",
name: "1"
}, [object Object] {
id: "2",
name: "2"
}, [object Object] {
id: "3",
name: "3"
}]
原因
因为数组遍历时,每一个对象的引用被变量item接受,若直接赋值一个对象给item,相当于把这个对象的引用给了item,并没有改变原数组的值。
做法
let arr = [
{ name: '1',
id: '1'
},{ name: '2',
id: '2'
},{ name: '3',
id: '3'
}
]
arr.forEach(item=>{
if(item.name==='2'){
item.name = '4'
}
})```