Ich habe ein Bedürfnis, Elemente am Anfang eines Arrays hinzuzufügen oder voranzustellen.
Zum Beispiel, wenn mein Array wie unten aussieht:
[23, 45, 12, 67]
Und die Antwort von meinem AJAX-Aufruf ist "34", dann soll das aktualisierte Array wie folgt aussehen:
[34, 23, 45, 12, 67]
Zurzeit 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 eine bessere Möglichkeit, dies zu tun? Verfügt Javascript über eine eingebaute Funktion, die dies ermöglicht?
Die Komplexität meiner Methode ist O(n)
und es wäre wirklich interessant, bessere Implementierungen zu sehen.
Verwenden Sie unshift
. Es ist wie push
, außer dass es Elemente am Anfang des Arrays hinzufügt, anstatt am Ende.
unshift
/push
- fügt ein Element an den Anfang/Ende eines Arraysshift
/pop
- entfernt und gibt das erste/letzte Element eines Arrays zurückEin einfaches Diagramm...
unshift -> array <- push
shift <- array -> pop
und Tabelle:
add remove start end
push X X
pop X X
unshift X X
shift X X
Sehen Sie sich die MDN Array-Dokumentation an. Praktisch jede Sprache, die über die Fähigkeit verfügt, Elemente aus einem Array zu schieben/einzuschieben, verfügt auch über die Fähigkeit, Elemente zu verschieben/auszuschieben (manchmal push_front
/pop_front
genannt), Sie sollten diese niemals selbst implementieren müssen.
Wie in den Kommentaren erwähnt, können Sie, wenn Sie vermeiden wollen, Ihr ursprüngliches Array zu verändern, concat
verwenden, das zwei oder mehr Arrays miteinander verkettet. Damit kann man ein einzelnes Element funktionell an den Anfang oder das Ende eines bestehenden Arrays schieben; dazu muss man das neue Element in ein Einzelelement-Array verwandeln:
const array = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
concat
kann auch Elemente anhängen. Die Argumente von concat
können von beliebigem Typ sein; sie werden implizit in ein Einzelelement-Array eingeschlossen, wenn sie nicht bereits ein Array sind:
const array = [ 3, 2, 1 ]
const newLastElement = 0
// Diese beiden Zeilen sind gleichwertig:
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // // [ 3, 2, 1, 0 ]
var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
Schnelles Cheatsheet:
Die Begriffe shift/unshift und push/pop können etwas verwirrend sein, zumindest für Leute, die mit der Programmierung in C nicht vertraut sind.
Wenn Sie mit dem Fachjargon nicht vertraut sind, finden Sie hier eine schnelle Übersetzung der alternativen Begriffe, die Sie sich vielleicht leichter merken können:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )