这个简单的代码适用于一维数组但不适用于多维数组:
var a=[[0,0,0],[0,0,0],[0,0,0]];
var b=a.slice(0);
a[0][0]=2;
alert(b[0][0]);//Should display 0, but displays 2
如何复制多维数组?
编辑:对于这个例子,维度是2,但我的真实数组的维度是4
最佳答案
这是一个适用于任何深度的通用解决方案,并假设您的数组实际上是数组,而不是类数组对象。
function clone(arr) {
arr = arr.slice()
for (var i = 0; i < arr.length; i++)
if (Array.isArray(arr[i]))
arr[i] = clone(arr[i])
return arr
}
如果旧版浏览器需要,可以填充 Array.isArray
方法。
if (!Array.isArray) {
Array.isArray = function(arr) {
return Object.prototype.toString.call(arr) === "[object Array]"
}
}
function clone(arr) {
return arr.map(function(item) {
if (Array.isArray(item))
return clone(item)
return item
})
}
这是一个使用 .map()
的解决方案。
关于javascript - 无法复制多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003651/