1

这个简单的代码适用于一维数组,但不适用于多维数组:

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

http://jsfiddle.net/e2vFk/3

如何复制多维数组?

编辑:对于这个例子,维度是 2,但我的真实数组的维度是 4

4

4 回答 4

2

这是一个通用解决方案,适用于任何深度,并假设您的数组实际上是数组,而不是类似数组的对象。

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()替代使用的解决方案。

于 2013-08-01T20:42:58.130 回答
1
 var b=a.map(function(arr) { return arr.slice(); });
于 2013-08-01T20:21:43.320 回答
1

最简单的克隆方法是

function clone(array){
   return JSON.parse(JSON.stringify(array));
}

适用于所有/任何维度,除非您有函数和循环变量。

于 2013-08-01T20:48:03.937 回答
0

你只是在复制引用..使用循环

var a=[[0,0,0],[0,0,0],[0,0,0]];
var b= new Array()
for(i=0;i<a.length;i++)
    b[i]=a[i].slice(0);



a[0][0] = 2

alert(b[0][0]);
alert(a[0][0]);
于 2013-08-01T20:21:52.280 回答