Javascript:使用slice()创建数组的副本;

时间:2018-08-31 18:29:37

标签: javascript arrays

我需要创建一个数组副本,以便可以对一个数组进行修改而不会影响另一个数组。

例如:

var a = [[1],[2],[3]];
var b = a.slice(0);
b[1].push(100);
b // [[1],[2, 100],[3]];
a // expect: [[1],[2],[3]]; , actual: [[1],[2, 100],[3]];

我也尝试过:

var b = new Array(a);

但是这会将所有[1],[2],[3]放入新数组的索引0中。

我在这里想念什么?

谢谢大家!

2 个答案:

答案 0 :(得分:2)

您还必须复制内部数组:

 var b = a.map(sub => sub.slice());

答案 1 :(得分:0)

slice()进行浅拷贝,对于 n 个级别,您可以使用JSON.parse(JSON.stringify(a))或递归:

var a = [[[1]],[2],[3]];

var b = JSON.parse(JSON.stringify(a))

b[0][0][0] = 999;

console.log(a)

console.log(b)