2013-07-28 51 views
7

我有兩個數組:製作一個陣列等於另一個

var array1 = [1, 2, 3]; 
var array2 = [4, 5, 6]; 

我想陣列1正好等於陣列2。有人告訴我,我不能簡單地做:

array1 = array2; 

如果我不能這樣做,我怎麼能讓array1等於array2?

感謝

+4

'陣列1 = array2.slice(0)'? – DCoder

+0

@DCoder如果這是我的問題的答案,爲什麼不提交它作爲答案? :P – jskidd3

+0

爲什麼你不能'array1 = array2;'? –

回答

12

如果你只需要一個數組,你可以簡單地使用片這樣的元素的副本:

a = [1,2,3] 
copyArray = a.slice(0) 
[1 , 2 , 3] 

至於爲什麼你不應該在這裏使用assignement看看下面這個例子:

a = [1,2,3] 
b = a 
a.push(99) 
a 
[1,2,3,99] 
b 
[1,2,3,99] 

如果複製一個數組,你沒有這個問題:

a = [1,2,3] 
b = a.slice(0) 
a.push(888) 
a 
[1,2,3,888] 
b 
[1,2,3] 
+0

這是否與'copyArray = a'具有完全相同的效果? – jskidd3

+0

感謝您的編輯。很好的答案! – jskidd3

+0

我點了我的答案以顯示差異 –

0

爲了您的陣列的深層副本,這樣做(REFERENCE):

function deepCopy(obj) { 
    if (Object.prototype.toString.call(obj) === '[object Array]') { 
     var out = [], i = 0, len = obj.length; 
     for (; i < len; i++) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    if (typeof obj === 'object') { 
     var out = {}, i; 
     for (i in obj) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    return obj; 
} 
0

這將這樣的伎倆:

var clone = originalArray.slice(0); 
+0

這和做clone = originalArray一樣嗎? – jskidd3