2016-03-02 32 views
5

następujący kod:javascript: nieoczekiwane zachowanie popychanie do pustej tablicy

var arr1 = [1,2,3]; 
var obj1 = {}; 

for (var j = 0; j < arr1.length; j++) { 
    if (obj1[j.toString()]) 
     obj1[j.toString()] = obj1[j.toString()].push(j) 
    else 
     obj1[j.toString()] = [].push(j); 
} 

produkowane następujący wynik:

obj1 
=> { '0': 1, '1': 1, '2': 1 } 

a ja po prostu uprzejmie chciał wiedzieć dlaczego.

(teraz jestem świadomy, że następujący kod:

var arr1 = [1,2,3]; 
var obj1 = {}; 

for (var j = 0; j < arr1.length; j++) { 
    if (obj1[j.toString()]) 
     obj1[j.toString()] = obj1[j.toString()].push(j) 
    else { 
     obj1[j.toString()] = []; 
     obj1[j.toString()].push(j); 
    } 
} 

da mi pożądany wynik:

obj1 
=> { '0': [ 0 ], '1': [ 1 ], '2': [ 2 ] } 

)

+2

Cóż, '[]' jest takie samo jak 'Array.prototype', nie ma pustej tablicy, a ty nie naciskasz na nic wewnątrz' obj'. Drugi fragment kodu jest prawidłowym sposobem, w którym faktycznie tworzysz pustą tablicę. – adeneo

Odpowiedz

11

Ponieważ from the documentation metoda Array.prototype.push() zwraca długość Array , a nie sama tablica.

+0

Nie zauważyłem pierwszego urywka. +1 –

+0

Potwierdzono. [1,2,3] .pach (60); // 4; [] .pach (90); // 1; Dzięki. – anatta