Ich muss Elemente am Anfang eines Arrays hinzufügen oder voranstellen.
Zum Beispiel, wenn mein Array wie folgt aussieht:
[23, 45, 12, 67]
Die Antwort von meinem AJAX-Aufruf lautet 34
: Ich möchte, dass das aktualisierte Array wie folgt aussieht:
[34, 23, 45, 12, 67]
Derzeit plane ich es so zu machen:
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
Gibt es einen besseren Weg, dies zu tun? Verfügt Javascript über eine integrierte Funktionalität, die dies ermöglicht?
Die Komplexität meiner Methode ist O(n)
und es wäre wirklich interessant, bessere Implementierungen zu sehen.
javascript
arrays
Mond
quelle
quelle
push
Anweisungen zu verwenden , denen ein Aufruf von folgtreverse
, anstattunshift
ständig aufzurufen .Antworten:
Verwenden Sie
unshift
. Es ist wiepush
, außer dass Elemente am Anfang des Arrays anstelle des Endes hinzugefügt werden.unshift
/push
- Füge ein Element am Anfang / Ende eines Arrays hinzushift
/pop
- entferne das erste / letzte Element eines Arrays und gib es zurückEin einfaches Diagramm ...
und Diagramm:
Lesen Sie die Dokumentation zum MDN-Array . Praktisch jede Sprache, die Elemente aus einem Array pushen / entfernen kann , kann auch Elemente verschieben / verschieben (manchmal als
push_front
/ bezeichnetpop_front
). Sie sollten diese niemals selbst implementieren müssen.Wie in den Kommentaren erwähnt, können Sie verwenden, wenn Sie vermeiden möchten, dass Ihr ursprüngliches Array mutiert
concat
, wodurch zwei oder mehr Arrays miteinander verknüpft werden. Sie können dies verwenden, um ein einzelnes Element funktional auf die Vorder- oder Rückseite eines vorhandenen Arrays zu verschieben. Dazu müssen Sie das neue Element in ein einzelnes Elementarray umwandeln:concat
kann auch Elemente anhängen. Die Argumente fürconcat
können von beliebigem Typ sein. Sie werden implizit in ein Einzelelement-Array eingeschlossen, sofern sie noch kein Array sind:quelle
concat
möglicherweise vorzuziehen, da das neue Array zurückgegeben wird. Sehr nützlich zum Verketten.[thingToInsertToFront].concat(originalArray).reduce(fn).reverse().map(fn)
etc ... Wenn Sie verwendenunshift
, können Sie diese Verkettung nicht durchführen, da Sie nur die Länge zurückbekommen.quelle
Verwenden Sie mit ES6 den Spread-Operator
...
:DEMO
quelle
concat
stattdessen verwenden.Ein anderer Weg, dies zu tun
concat
Der Unterschied zwischen
concat
undunshift
besteht darin, dassconcat
ein neues Array zurückgegeben wird. Die Leistung zwischen ihnen kann hier gefunden werden .Hier ist das Testergebnis
quelle
unshift
± 3,18% 99% langsamerconcat
: 2.436.894 ± 3,39% am schnellstenSchneller Spickzettel:
Die Begriffe Shift / Unshift und Push / Pop können etwas verwirrend sein, zumindest für Leute, die mit der Programmierung in C möglicherweise nicht vertraut sind.
Wenn Sie mit dem Jargon nicht vertraut sind, finden Sie hier eine kurze Übersetzung alternativer Begriffe, die möglicherweise leichter zu merken sind:
quelle
Sie haben ein Array:
var arr = [23, 45, 12, 67];
Um ein Element am Anfang hinzuzufügen, möchten Sie Folgendes verwenden
splice
:quelle
unshift
50% schneller (aber meistens besser lesbar)Ohne zu mutieren
Tatsächlich mutieren alle
unshift
/push
undshift
/ das Ursprungsarray.pop
Das
unshift
/push
Hinzufügen eines Elements zum vorhandenen Array von Anfang / Ende undshift
/pop
Entfernen eines Elements vom Anfang / Ende eines Arrays.Es gibt jedoch nur wenige Möglichkeiten, einem Array Elemente ohne Mutation hinzuzufügen. Das Ergebnis ist ein neues Array, das am Ende des Arrays den folgenden Code enthält:
Verwenden Sie den folgenden Code, um den Anfang des ursprünglichen Arrays hinzuzufügen:
Mit der obigen Methode fügen Sie den Anfang / das Ende eines Arrays ohne Mutation hinzu.
quelle
slice
Funktion am Ende von gesetztoriginArray
, um zu verhindern, dass sie veränderbar ist.Verwendung der ES6-Destrukturierung: (Vermeidung von Mutationen aus dem ursprünglichen Array)
const newArr = [item, ...oldArr]
quelle
quelle
Wenn Sie kontinuierlich ein Element am Anfang eines Arrays einfügen müssen, ist es schneller,
push
Anweisungen zu verwenden , denen ein Aufruf von folgtreverse
, anstattunshift
ständig aufzurufen .Benchmark-Test: http://jsben.ch/kLIYf
quelle
Mit
splice
fügen wir am Anfang ein Element in ein Array ein:quelle