2013-08-01 37 views
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

+0

實際深度總是「4」,還是可以變化? –

+0

@CrazyTrain它總是4,但如果答案不是特定的那個維度,它會更好。 – Mageek

回答

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()而不是一個解決方案。使克隆

1
var b=a.map(function(arr) { return arr.slice(); }); 
+0

對不起,我忘了提及一些東西,看看我的編輯。 – Mageek

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]); 
+0

對不起,我忘了提及一些東西,看看我的編輯。 – Mageek

1

最簡單的方法是

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

作品的一切/除非你有函數和變量圓形任何尺寸。