Wie die am häufigsten gewählte Antwort besagt, a.push(...b)
ist wahrscheinlich die richtige Antwort, wenn man das Problem der Größenbeschränkung berücksichtigt.
Andererseits scheinen einige der Antworten zur Leistung veraltet zu sein.
Die folgenden Zahlen gelten für den 2022-05-20
![enter image description here]()
![enter image description here]()
![enter image description here]()
von aquí
Es scheint, dass push
im Jahr 2022 in allen Bereichen am schnellsten ist. Das könnte sich in Zukunft ändern.
Antworten, die die Frage ignorieren (Erstellung eines neuen Arrays), gehen am Thema vorbei. Viele Codes müssen/wollen möglicherweise ein Array an Ort und Stelle ändern, da es andere Referenzen auf dasselbe Array geben kann
let a = [1, 2, 3];
let b = [4, 5, 6];
let c = a;
a = a.concat(b); // a and c are no longer referencing the same array
Diese anderen Referenzen könnten tief in einem Objekt stecken, etwas, das in einer Schließung erfasst wurde, usw..
Als wahrscheinlich schlechtes Design, aber zur Veranschaulichung, stellen Sie sich vor, Sie hätten
const carts = [
{ userId: 123, cart: [item1, item2], },
{ userId: 456, cart: [item1, item2, item3], },
];
und eine Funktion
function getCartForUser(userId) {
return customers.find(c => c.userId === userId);
}
Dann möchten Sie Artikel in den Warenkorb legen
const cart = getCartForUser(userId);
if (cart) {
cart.concat(newItems); // FAIL
cart.push(...newItems); // Success!
}
Nebenbei bemerkt, die Antworten, die eine Änderung der Array.prototype
sind wohl eine schlechte Werbung. Das Ändern der nativen Prototypen ist im Grunde eine Landmine in Ihrem Code. Eine andere Implementierung kann sich von Ihrer unterscheiden und so wird Ihr Code kaputt gehen oder Sie werden deren Code kaputt machen, der das andere Verhalten erwartet. Dies gilt auch, wenn eine native Implementierung hinzugefügt wird, die mit Ihrer kollidiert. Sie sagen vielleicht: "Ich weiß, was ich verwende, also ist das kein Problem", und das mag im Moment stimmen, wenn Sie ein einzelner Entwickler sind, aber fügen Sie einen zweiten Entwickler hinzu, und der kann Ihre Gedanken nicht lesen. Und Sie sind dieser zweite Entwickler in ein paar Jahren, wenn Sie es vergessen haben und dann irgendeine andere Bibliothek (Analytics?, Logging?, ...) auf Ihre Seite aufpfropfen und vergessen, welche Spuren Sie im Code hinterlassen haben.
Dies ist nicht nur eine Theorie. Im Netz gibt es unzählige Geschichten von Menschen, die auf diese Minen gestoßen sind.
Es gibt wohl nur wenige sichere Verwendungen für die Änderung des Prototyps eines nativen Objekts. Eine davon ist das Polyfilling einer bestehenden und spezifizierten Implementierung in einem alten Browser. In diesem Fall ist die Spezifikation definiert, die Spezifikation ist implementiert und wird in neuen Browsern ausgeliefert, man möchte nur das gleiche Verhalten in alten Browsern erreichen. Das ist ziemlich sicher. Pre-Parcheando (Spezifikation in Arbeit, aber noch nicht verfügbar) ist wohl nicht sicher. Specs ändern sich vor der Auslieferung.
10 Stimmen
Aus @Zahnbürste's Kommentar zu einer Antwort:
a.push(...b)
. Das Konzept ähnelt dem der ersten Antwort, wurde aber für ES6 aktualisiert.0 Stimmen
>>> a.push(...b)