2013-07-28 7 views
7

Mam dwie tablice:Dokonywanie jednej tablicy dokładnie równy innym

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

chcę tablica 1 będzie dokładnie równa tablicy 2. Powiedziano mi, nie mogę po prostu zrobić:

array1 = array2; 

Jeśli nie mogę tego zrobić, w jaki sposób mogę uczynić tablicę1 równą array2?

Dzięki

+4

'array1 = array2.slice (0)'? – DCoder

+0

@DCoder Jeśli jest to odpowiedź na moje pytanie, dlaczego nie przesłać go jako odpowiedź? : P – jskidd3

+0

Dlaczego nie byłbyś w stanie zrobić 'tablica1 = tablica2;'? –

Odpowiedz

12

Jeśli wystarczy kopię elementów tablicy można po prostu wykorzystać kawałek tak:

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

Jak, dlaczego nie powinno się używać ASSIGNMENT tutaj spojrzeć na ten przykład:

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

Jeśli skopiować tablicę nie masz tego problemu:

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

Czy ma to ten sam efekt co "copyArray = a"? – jskidd3

+0

Dzięki za edycję. Świetna odpowiedź! – jskidd3

+0

Dited moją odpowiedź, aby pokazać różnicę –

0

Na głębokim kopią tablicy, to zrobić (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

To załatwi:

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

Czy to jest tak samo jak robi clone = originalArray? – jskidd3