【问题标题】:JS Make deep copy of array [duplicate]JS制作数组的深层副本[重复]
【发布时间】:2018-03-12 12:35:11
【问题描述】:

有什么方法可以对变量进行深层复制? (不反对)。示例:

var a = ["String", "string"];
var b = a;

b.splice(1, 1);

b = a;

在我的示例中,a 不应该更改,我想稍后使用它来恢复 b。 (如上面的代码所示)。

我知道= 只是创建了一个新的引用,因此问题是:有没有其他方法可以让我进行深层复制而不是引用?

要注意我不能使用任何库,我找到了建议 jQuery 等的答案,但我不能使用这个。

【问题讨论】:

  • 只有 javascript 中的对象(数组也是对象)才能相互引用。所有其他变量类型都是新变量。
  • @RickardElimää 对不起,这个例子真的很差,现在修好了

标签: javascript arrays deep-copy


【解决方案1】:

您是否测试过您的代码? Numbers 和其他原语被复制,而不是引用。

var a = 1;
var b = a;
console.log(`a is ${a}`);
console.log(`b is ${b}`);
b++;
console.log(`a is ${a} (no change)`);
console.log(`b is ${b}`);

使用不同的示例进行编辑后:

var a = ["foo", "bar"];
var b = a.slice(); // array copy
console.log(`a is ${a}`);
console.log(`b is ${b}`);
b.splice(1, 1);
console.log(`a is ${a} (not changed)`);
console.log(`b is ${b}`);
b = a;

【讨论】:

  • 那是我的糟糕,非常糟糕的例子,在我的情况下,我正在处理我已经测试过的字符串数组
  • @Chaost 数组不是原始数组而是对象。
  • @Chaost 字符串数组(字符串数组?)只是一个对象,所以参考深拷贝数组。
  • @AurelBílý 哦没注意到var b = a;
  • 试试这一行:var b = Object.assign([], a);
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多