【发布时间】:2015-04-13 11:47:12
【问题描述】:
使用 slice(0) 和 concat() 将对象数组复制到 javascript 中的另一个数组中不起作用。
我尝试了以下方法来测试我是否使用此方法获得了预期的深层复制行为。但是在我对复制的数组进行更改后,原始数组也会被修改。
var tags = [];
for(var i=0; i<3; i++) {
tags.push({
sortOrder: i,
type: 'miss'
})
}
for(var tag in tags) {
if(tags[tag].sortOrder == 1) {
tags[tag].type = 'done'
}
}
console.dir(tags)
var copy = tags.slice(0)
console.dir(copy)
copy[0].type = 'test'
console.dir(tags)
var another = tags.concat()
another[0].type = 'miss'
console.dir(tags)
如何将一个数组深度复制到另一个数组中,这样如果我对复制数组进行更改,原始数组就不会被修改。
【问题讨论】:
-
我不确定您要做什么,但是。我建议将您的第二个 for 循环更改为
for of循环for of(var tag of tags) { if(tag.sortOrder == 1) { tag.type == 'done' }} -
根据你的环境,你可以试试 Object.create?
-
@zlatko 你能举个同样的例子吗
-
哦,var newObject = Object.create(oldObject) 应该给你一个基于 proto 的旧对象的取消引用克隆。不知道阵列,买你可以试试。评论的环境部分是我不知道你是在使用 V8 还是其他 JS 引擎,我认为它不是到处都支持(但有 polyfils)。
标签: javascript arrays node.js google-chrome deep-copy