js使用concat拼接的对象数组在遍历赋值时为什么会赋予同一值?
如下代码,使用concat拼接的对象数组在遍历赋值时会赋予同一值
let a = [
{},
]
b = a.concat(a).concat(a).concat(a).concat(a)
for (let i = 0, j = b.length; i < j; i++) {
b[i].id = i
}
console.log(b)
控制台输出如下(和闭包问题很像,但写了立即执行函数也是同样的结果)
(5) [{…}, {…}, {…}, {…}, {…}]
0:{id: 4}
1:{id: 4}
2:{id: 4}
3:{id: 4}
4:{id: 4}
但不是非对象数组是赋值便没问题
let a = [
0,
]
b = a.concat(a).concat(a).concat(a).concat(a)
for (let i = 0, j = b.length; i < j; i++) {
b[i] = i
}
console.log(b)
控制台输出如下
[0, 1, 2, 3, 4]
请问为什么会发生这种情况
对于concat拼接的对象数组又应该如何循环赋值
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
拷贝的原因,
[].concat(arr),arr.slice(),Object.assign([],arr),[...arr]都只针对第一层深拷贝,多层则是浅拷贝
涉及多层拷贝建议用JSON.parse(JSON.stringify(arr))
又是引用问题