Jeg har behov for å legge til eller legge til elementer i begynnelsen av en matrise.
For eksempel, hvis matrisen min ser ut som nedenfor:
[23, 45, 12, 67]
Og svaret fra AJAX-kallet mitt er 34
, vil jeg at den oppdaterte matrisen skal være som følgende:
[34, 23, 45, 12, 67]
Foreløpig planlegger jeg å gjøre det slik:
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
Finnes det noen bedre måte å gjøre dette på? Har Javascript noen innebygd funksjonalitet som gjør dette?
Kompleksiteten til metoden min er O(n)
, og det ville være veldig interessant å se bedre implementeringer.
Bruk unshift
. Det er som push
, bortsett fra at det legger til elementer i begynnelsen av matrisen i stedet for slutten.
/
push` - legger til et element i begynnelsen/enden av en matrise.shift
/pop
- fjerner og returnerer det første/siste elementet i en matrise.Et enkelt diagram...
unshift -> array <- push
shift <- array -> pop
og diagram:
add remove start end
push X X
pop X X
unshift X X
shift X X
Sjekk ut MDN Array-dokumentasjonen. Så godt som alle språk som har muligheten til å skyve/poppe elementer fra et array vil også ha muligheten til å unshift/shift (noen ganger kalt push_front
/pop_front
) elementer, du skal aldri måtte implementere disse selv.
Som påpekt i kommentarene, hvis du vil unngå å mutere din opprinnelige matrise, kan du bruke concat
, som sammenkjeder to eller flere matriser sammen. Du kan bruke dette til å funksjonelt skyve et enkelt element på forsiden eller baksiden av et eksisterende array; for å gjøre det, må du gjøre det nye elementet til et enkelt element array:
const matrise = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [nyttFørsteElement].concat(array) // [ 4, 3, 2, 1 ]
concat
kan også legge til elementer. Argumentene til concat
kan være av en hvilken som helst type; de er implisitt pakket inn i en enkelt-element matrise, hvis de ikke allerede er en matrise:
const matrise = [ 3, 2, 1 ]
const newLastElement = 0
// Begge disse linjene er ekvivalente:
const newArray1 = array.concat(newLastElement) // // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // // [ 3, 2, 1, 0 ]
Hurtigark: Hurtigark: Hurtigark: Hurtigark: Hurtigark: **
Begrepene shift/unshift og push/pop kan være litt forvirrende, i hvert fall for folk som ikke er kjent med programmering i C.
Hvis du ikke er kjent med fagspråket, finner du her en rask oversettelse av alternative begreper som kan være lettere å huske:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )