Ik moet elementen toevoegen of toevoegen aan het begin van een array.
Bijvoorbeeld, als mijn array er uitziet zoals hieronder:
[23, 45, 12, 67]
En het antwoord van mijn AJAX oproep is 34
, dan wil ik dat de bijgewerkte array er als volgt uitziet:
[34, 23, 45, 12, 67]
Momenteel ben ik van plan om het als volgt te doen:
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
Is er een betere manier om dit te doen? Heeft Javascript een ingebouwde functionaliteit die dit doet?
De complexiteit van mijn methode is O(n)
en het zou erg interessant zijn om betere implementaties te zien.
Gebruik unshift
. Het is als push
, behalve dat het elementen toevoegt aan het begin van de array in plaats van het einde.
unshift
/push
- voeg een element toe aan het begin/eind van een arrayshift
/pop
- verwijder en geef het eerste/laatste element van een array terugEen eenvoudig schema...
unshift -> array <- push
shift <- array -> pop
en grafiek:
add remove start end
push X X
pop X X
unshift X X
shift X X
Bekijk de MDN Array documentatie. Vrijwel elke taal die de mogelijkheid heeft om elementen uit een array te pushen/poppen zal ook de mogelijkheid hebben om elementen te unshiften/shiften (soms push_front
/pop_front
genoemd), je zou deze nooit zelf moeten hoeven te implementeren.
Zoals aangegeven in de commentaren, als je wilt voorkomen dat je originele array gemuteerd wordt, kun je gebruik maken van concat
, die twee of meer arrays samenvoegt. Je kunt dit gebruiken om functioneel een enkel element aan de voor- of achterkant van een bestaande array te duwen; om dit te doen, moet je het nieuwe element in een enkel element array veranderen:
``javascript const array = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
`concat` kan ook items appen. De argumenten voor `concat` kunnen van elk type zijn; ze worden impliciet gewikkeld in een enkel-element array, als ze niet al een array zijn:
``javascript
const array = [ 3, 2, 1 ]
const newLastElement = 0
// Deze beide regels zijn equivalent:
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]
Quick Cheatsheet:
De termen shift/unshift en push/pop kunnen een beetje verwarrend zijn, althans voor mensen die niet vertrouwd zijn met programmeren in C.
Als u niet bekend bent met de lingo, is hier een snelle vertaling van alternatieve termen, die misschien gemakkelijker te onthouden zijn:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )