array.slice足以在JavaScript中处理多维数组吗?

时间:2014-08-25 18:38:18

标签: javascript

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(); });

2 个答案:

答案 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方法(或类似的东西)。