2016-05-27 14 views
2

ich durch einige Code graste und ich frage mich, wie dieseConcat in ein leeres Array in Javascript

grid.push([].concat(row)); 

In meinem Verständnis nützlich sein könnte, ist es das gleiche wie

grid.push([row]); 

Warum die ' concat 'Aufregung?

+1

Weil 'row' möglicherweise ein primitiver (oder einfach kein Array) Wert ist. – Amit

Antwort

5

Sie möchten .concat verwenden, wenn Sie das Array reduzieren müssen und kein Array mit anderen Arrays haben. Z.B.

var a = [1,2,3]; 
var b = [4]; 

Szenario 1

console.log(b.push(a)); 
// Result: [4, [1,2,3]] 

Szenario 2

console.log(b.concat(a)); 
// Result: [4,1,2,3] 

Ihre beiden Szenarien in einer Reihe von Array So. Da [].concat() nur zu einem Array führt, hat das Drücken von [row], [].concat(row) das gleiche Ergebnis.

Aber wenn Sie eine abgeflachte Array wollen, gibt es eine kleine Änderung im Code erforderlich, dass Sie das Array row mit grid und nicht .push das Ergebnis concat- es .concat haben, wie in Szenario 2 gezeigt

+0

'console.log (b.push ([a]));' ... ('grid.push ([row]);'). Es ist wie OP in Post angegeben hat. Ich bin neugierig auf den Unterschied ... – Rayon

+0

Siehe die aktualisierte Antwort –

+0

Beide produzieren Array eines Arrays ... Besser, ausführbares Snippet mit gültiger Syntax zur Verfügung zu stellen, wie in Frage gestellt ... – Rayon

0

Mit grid.push([row]); schieben Sie ein Array mit dem row selbst. Wenn Zeile ein Array ist (z. B. [0, 1, 2]). Sie werden ein Array mit einem anderen Array (d. H. [[0, 1, 2]]) schieben.

Mit grid.push([].concat(row)); drücken Sie ein Array mit den Elementen in row (d. H. [0, 1, 2]).

Es ist jedoch unklar, warum es nicht nur geschrieben grid.push(row) ist, die, wenn row ein Array ist, könnte mehr oder weniger das gleiche wie grid.push([].concat(row)); scheinen.

kann ich zwei Erklärungen dafür finden:

  1. row kein Array ist, sondern ein "Array-like" Objekt und [].concat(row) verwendet wird, um es zu konvertieren (wie Array.from tun könnte).

  2. Ihr Codierer möchte nicht row drücken, sondern eine Kopie der Zeile stattdessen, die gegen jede weitere Änderung des ursprünglichen row geschützt ist.

Verwandte Themen