【问题标题】:Deep copy an array with Array.prototype.slice()使用 Array.prototype.slice() 深拷贝一个数组
【发布时间】:2016-07-13 19:09:37
【问题描述】:

我知道我们可以使用 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}]

有人向我展示了如何解决这种情况。谢谢。

【问题讨论】:

标签: javascript deep-copy


【解决方案1】:

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

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

【讨论】:

  • 只有在包含的对象不包含 JSON 中不允许的日期、函数或其他值时才有效
  • @GeorgeJempty - 你是 100% 正确的。我确实赞成乔纳森的评论,因为这个问题之前已经回答过了。最好将其标记为重复。
  • 我不知道是否还有其他解决方案,但这对我来说非常有效。谢谢。
  • @GeorgeJempty:是的,我明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多