array.slice
是否足以在JavaScript中克隆多维数组?
例如:
var array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
var b = array.slice();
console.log(b);
我在Play Play中看到了一个辅助实现:Lea Verou on pluralsight:
b = array.slice().map( function(row){ return row.slice(); });
答案 0 :(得分:4)
docs非常明确:
slice()
方法将数组的一部分的浅表副本返回到新的数组对象中。
所以答案是否定的:slice
本身不足以克隆多维数组。它只会克隆一个维度。如果你想要深度克隆,你需要递归地克隆每个元素(你发布的“二次实现”的方式)。
答案 1 :(得分:3)
来自MDN:
slice()
方法将数组的一部分的浅副本返回到新的数组对象中。
也就是说,它不会克隆内部数组/对象。观察:
var array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
var b = array.slice();
b[0].push(10);
console.log(array);
> [ [1, 2, 3, 10], [4, 5, 6], [7, 8, 9] ]
因此,如果您想要2D数组的深层副本,那么您必须使用map方法(或类似的东西)。