504 Stimmen

Mehrere Elemente in ein Array einfügen

Ich versuche, mehrere Elemente als ein Array zu schieben, bekomme aber einen Fehler:

> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined

Ich versuche, ähnliche Dinge zu tun, wie ich es in Ruby tun würde, ich dachte, dass apply so etwas wie * ist.

>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]

0 Stimmen

Dein Beispiel war fast korrekt, es musste nur a anstelle von null platziert werden, wie hier: a.push.apply(a, [1,2])

868voto

amit1310 Punkte 8715

Sie können mehrere Elemente auf folgende Weise in ein Array einfügen

var a = [];

a.push(1, 2, 3);

console.log(a);

1 Stimmen

Diese Antwort und die ausgewählte Antwort erzeugen unterschiedliche und möglicherweise unerwartete Ergebnisse. a.push(1) vs. a.push([1])

3 Stimmen

Kann jemand erklären, warum dies so viel mehr Stimmen hat als die akzeptierte Antwort? Es könnte einfacher sein, aber ist weniger flexibel. Wenn Sie 2 Arrays zusammenführen möchten, funktioniert dies nicht.

3 Stimmen

@BluE Wenn Sie zwei Arrays zusammenführen möchten, verwenden Sie einfach array.concat()

699voto

canac Punkte 13844

Jetzt in ECMAScript2015 (auch bekannt als ES6) können Sie den Spread-Operator verwenden, um mehrere Elemente auf einmal anzufügen:

var arr = [1];
var newItems = [2, 3];
arr.push(...newItems);
console.log(arr);

Siehe Kangax's ES6 compatibility Tabelle, um zu sehen, welche Browser kompatibel sind

56 Stimmen

Whaaaaaaat das ist fantastisch, außerdem, wenn Sie es in Typescript machen, wird es zu push.apply kompilieren, also haben Sie Abwärtskompatibilität

3 Stimmen

Dies hat eine Größenbeschränkung für Arrays. Versuchen Sie es mit großen Arrays. Sie werden eine Ausnahme erhalten.

0 Stimmen

Ich wollte mehr über die Größenbeschränkung erfahren, also habe ich es ausprobiert. a = []; b = []; for (let i = 0; i < 1000000; i++) { b.push(i); } a.push(...(b.slice(0, 130000))); Das verursacht tatsächlich einen Fehler bei mir. "Uncaught RangeError: Maximale Aufruflimit überschritten" Das Limit hängt möglicherweise nicht nur von der Anzahl der Elemente im Array ab, sondern auch von der Größe der Elemente. Das ist nur eine Vermutung. Es könnte auch von der Umgebung abhängen. Auch nur eine Vermutung. Ich habe noch nicht versucht, in der Dokumentation nachzusehen.

316voto

Niet the Dark Absol Punkte 310257

Bei der Verwendung der meisten Funktionen von Objekten mit apply oder call muss der Kontext-Parameter das Objekt sein, an dem gearbeitet wird.

In diesem Fall benötigen Sie a.push.apply(a, [1,2]) (oder korrekter Array.prototype.push.apply(a, [1,2]))

1 Stimmen

Gibt es eine Begrenzung, wie viele Elemente mit dieser Methode verschoben werden können? Ich weiß, dass JavaScript ein Argumentlimit hat, gilt das auch beim Verwenden der "apply" Funktion?

1 Stimmen

Ich glaube, dass es in älteren Browsern 65.535 und praktisch unbegrenzt (4B) in modernen Browsern ist.

0 Stimmen

Die Grenze ist ziemlich niedrig in Node (v20.4.0) mit den Standardeinstellungen. Ich habe den genauen Wert nicht gefunden, aber er liegt irgendwo zwischen 1<<16 und 1<<17.

96voto

VisioN Punkte 137670

Als Alternative können Sie Array.concat verwenden:

var result = a.concat(b);

Dies würde ein neues Array erstellen und zurückgeben, anstatt Elemente zum selben Array hinzuzufügen. Es kann nützlich sein, wenn Sie das Ursprungsarray nicht ändern möchten, sondern eine oberflächliche Kopie davon erstellen möchten.

31 Stimmen

Array.prototype.concat gibt ein neues Array zurück.

12 Stimmen

Er möchte das vorhandene Array erweitern, also ist Array.prototype.push.apply(arr1, arr2) die richtige Antwort, denn bei Verwendung von arr1.concat(arr2) wird ein neues Array erstellt.

4 Stimmen

@suricactus arr1 = arr1.concat(arr2) ist kein großes Problem und sieht viel sauberer aus. Das Hinzufügen zum alten Array oder das Ersetzen des alten Arrays durch das neue hängt von Ihren Bedürfnissen ab. Wenn Sie es mit 10m+ Elementen zu tun haben, wird das Hinzufügen zum alten Array schneller funktionieren, wenn Sie kleine Chunks verwalten, werden Sie kaum einen Unterschied in der Geschwindigkeit feststellen. Beide Optionen sind völlig legitim.

71voto

Nikhil Yadav Punkte 1119

Wenn Sie mehrere Elemente hinzufügen möchten, können Sie Array.push() zusammen mit dem Spread-Operator verwenden:

a = [1,2]
b = [3,4,5,6]
a.push(...b)

Das Ergebnis wird sein

a === [1,2,3,4,5,6]

0 Stimmen

Gibt es eine Begrenzung dafür, wie viele Elemente mit dieser Methode hinzugefügt werden können?

0 Stimmen

Kein @DavidCallanan

0 Stimmen

Dies scheint ein Duplikat von Canacs Antwort auf diese Frage zu sein, die im Jahr 2016 verfasst wurde. stackoverflow.com/a/35167699/1998680

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X