Ich versuche, mehrere Elemente als ein Array zu verschieben, erhalte jedoch einen Fehler
> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined
Ich versuche ähnliche Sachen zu machen, die ich in Ruby machen würde, ich dachte, das apply
ist so etwas wie *
.
>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
javascript
evfwcqcg
quelle
quelle
In ECMAScript2015 (auch bekannt als ES6) können Sie jetzt mit dem Spread-Operator mehrere Elemente gleichzeitig anhängen:
In der ES6-Kompatibilitätstabelle von Kangax finden Sie Informationen zu den kompatiblen Browsern
quelle
Sie können verwenden
Array.concat
:quelle
Array.prototype.push.apply(arr1, arr2)
ist dies die richtige Antwort, daarr1.concat(arr2)
Sie mit Ihnen ein neues Array erstellen.arr1 = arr1.concat(arr2)
ist keine große Sache und sieht viel sauberer aus. Das Verschieben auf ein altes Array oder das Ersetzen eines alten Arrays durch ein neues hängt von Ihren Anforderungen ab. Wenn Sie mit mehr als 10 m Elementen arbeiten, die auf ein altes Array verschoben werden, funktioniert dies schneller. Wenn Sie kleine Blöcke verwalten, stellen Sie kaum einen Geschwindigkeitsunterschied fest. Beide Optionen sind völlig legitim.prototype.push.apply
ruft nurpush
einmal an. Die obige Unterscheidung ist nicht in Bezug auf die Geschwindigkeit erforderlich, sondern in Bezug auf eine In-Place-Operation und die Erstellung eines neuen Arrays. Was wäre, wenn ich eine Methode hätte, die ein Array verwendet und es an Ort und Stelle ändern sollte? Dieconcat
Methode kann möglicherweise nicht funktionieren, selbst mit dem Code von VisionN, da die Variable für den Aufrufer der Funktion nicht geändert wird.a = a.concat(b)
ist immer noch eine kürzere Syntax alsArray.prototype.push.apply(arr1, arr2)
Wenn Sie eine Alternative zu
Array.concat
ECMAScript 2015 (auch bekannt als ES6, ES2015) suchen, die das Array nicht ändert, sondern ein neues Array zurückgibt, können Sie den Spread-Operator folgendermaßen verwenden :Beachten Sie, dass dies anders ist als die
push
Methode, da diepush
Methode das Array mutiert / modifiziert.Wenn Sie sehen möchten, ob bestimmte ES2015-Funktionen in Ihrem Browser funktionieren, überprüfen Sie die Kompatibilitätstabelle von Kangax .
Sie können auch Babel oder einen ähnlichen Transpiler verwenden, wenn Sie nicht auf die Browserunterstützung warten und ES2015 in der Produktion verwenden möchten.
quelle
Es gibt viele Antworten zu empfehlen :
Array.prototype.push(a, b)
. Es ist ein guter Weg, ABER wenn Sie ein wirklich großes b haben, haben Sie einen Stapelüberlauffehler (wegen zu vieler Argumente). Sei hier vorsichtig.Siehe Was ist der effizienteste Weg, um N Arrays zu verketten? für mehr Details.
quelle
quelle