Ich muss Elemente am Anfang eines Arrays hinzufügen oder voranstellen.
Wenn mein Array beispielsweise wie folgt aussieht:
[23, 45, 12, 67]
Und die Antwort meines AJAX - Aufrufs ist 34
. Ich möchte, dass das aktualisierte Array folgendermaßen aussieht:
[34, 23, 45, 12, 67]
Momentan 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.
Verwenden Sie unshift
. Es ist wie Push
, nur dass es statt des Endes Elemente am Anfang des Arrays hinzufügt.
unshift
/Push
- fügt ein Element am Anfang/Ende eines Arrays hinzushift
/pop
- Entfernt das erste/letzte Element eines Arrays und gibt es zurückEin einfaches Diagramm ...
unshift -> array <- Push
shift <- array -> pop
und Diagramm:
add remove start end
Push X X
pop X X
unshift X X
shift X X
Schauen Sie sich die Dokumentation zu MDN Array an . Praktisch jede Sprache, die Elemente aus einem Array pushen kann, hat auch die Möglichkeit, Elemente zu verschieben (manchmal auch als Push_front
/pop_front
bezeichnet). Sie sollten diese Elemente niemals selbst implementieren müssen.
var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
...
:DEMO
var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]
console.log(arr)
Eine andere Möglichkeit, dies durch concat
zu tun
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));
Der Unterschied zwischen concat
und unshift
besteht darin, dass concat
ein neues Array zurückgibt. Die Performance zwischen ihnen konnte hier gefunden werden.
function fn_unshift() {
arr.unshift(0);
return arr;
}
function fn_concat_init() {
return [0].concat(arr)
}
Hier ist das Testergebnis
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 der Sprache nicht vertraut sind, finden Sie hier eine kurze Übersetzung alternativer Begriffe, die sich leichter merken lässt:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_Push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )
sie haben ein Array: var arr = [23, 45, 12, 67];
Um ein Element am Anfang hinzuzufügen, verwenden Sie splice
:
var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
Push()
fügt ein neues Element am Ende eines Arrays hinzu.pop()
entfernt ein Element vom Ende eines Arrays.
unshift()
fügt ein neues Element am Anfang eines Arrays hinzu.shift()
entfernt ein Element vom Anfang eines Arrays.
benutze theArray.unshift(response)
var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata];
console.log(testdata)
var array = [23, 45, 12, 67];
array.unshift(11);
alert(array);
Eigentlich sind alle unshift
/Push
und shift
/pop
mutate das Origin-Array.
unshift
/Push
fügt ein Element zu dem vorhandenen Array von Anfang/Ende hinzu und shift
/pop
entfernt ein Element vom Anfang/Ende eines Arrays.
Es gibt jedoch eine Möglichkeit, Elemente ohne Mutation zu einem Array hinzuzufügen. Das Ergebnis ist ein neues Array, das am Ende des Arrays unter dem folgenden Code hinzugefügt werden soll:
const originArray = ['one', 'two', 'three'];
const newItem = 4;
const newArray = originArray.concat(newItem);
Um den Anfang des ursprünglichen Arrays hinzuzufügen, verwenden Sie den folgenden Code:
const originArray = ['one', 'two', 'three'];
const newItem = 0;
const newArray = (originArray.reverse().concat(newItem)).reverse();
Auf diese Weise fügen Sie den Anfang und das Ende eines Arrays ohne Mutation hinzu.
Wenn Sie ein Element kontinuierlich am Anfang eines Arrays einfügen müssen, ist es schneller, Push
-Anweisungen gefolgt von einem Aufruf von reverse
zu verwenden, anstatt ständig unshift
aufzurufen.
Benchmark-Test:http://jsben.ch/kLIYf
Mit splice
fügen wir am Anfang ein Element in ein Array ein:
arrName.splice( 0, 0, 'newName1' );