Javascript 使用array.prototype.slice()深度复制数组

Javascript 使用array.prototype.slice()深度复制数组,javascript,deep-copy,Javascript,Deep Copy,我知道我们可以使用Array.prototype.slice()对数组执行深度复制 var a = [1,2]; var b = a.slice(); b.push(3); console.log(a); 结果: [1,2] [{"propa":1},{"chosen":true}] 但在我的例子中,我使用它对一组对象执行深度复制。结果并不是我所期望的 var a = [{},{"chosen": true}]; var b = a.slice(); b[0]["propa"] = 1;

我知道我们可以使用Array.prototype.slice()对数组执行深度复制

var a = [1,2];
var b = a.slice();
b.push(3);
console.log(a);
结果:

[1,2]
[{"propa":1},{"chosen":true}]
但在我的例子中,我使用它对一组对象执行深度复制。结果并不是我所期望的

var a = [{},{"chosen": true}];
var b = a.slice();
b[0]["propa"] = 1;
console.log(a);
结果:

[1,2]
[{"propa":1},{"chosen":true}]

有人教我如何在这种情况下工作。谢谢。

您可以使用JSON对象对数组进行序列化和反序列化

var a = [{},{"chosen": true}];
var b = JSON.parse(JSON.stringify(a));
b[0]["propa"] = 1;
console.log(a);

相关:这只适用于所包含的对象没有日期、函数或其他在中不允许的值的情况JSON@GeorgeJempty-你是100%正确的。我对乔纳森的评论投了赞成票,因为这个问题以前已经得到了回答。也许最好将它标记为一个副本。我不知道是否还有其他解决方案,但这对我来说非常有效。谢谢你。@GeorgeJempty:是的,我明白了。