2013-07-28 27 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