是否array.slice足以在JavaScript中克隆多维数组?
例如:
var array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
var b = array.slice();
console.log(b);
Run Code Online (Sandbox Code Playgroud)
我从Play by Play:Lea Verou的复数形式中看到了一个辅助实现:
b = array.slice().map( function(row){ return row.slice(); });
Run Code Online (Sandbox Code Playgroud)
从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] ]
Run Code Online (Sandbox Code Playgroud)
因此,如果您想要2D数组的深层副本,则必须使用map方法(或类似方法)。
| 归档时间: |
|
| 查看次数: |
6144 次 |
| 最近记录: |