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

Deep copy an array with Array.prototype.slice()

我知道我们可以使用 Array.prototype.slice() 对数组执行深拷贝。

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

结果:

[1,2]

但在我的例子中,我用它对对象数组执行深拷贝。结果出乎我的意料。

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

结果:

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

有人告诉我如何解决这种情况。谢谢。

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

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