Jeg har brug for at tilføje eller tilføje elementer i begyndelsen af et array.
Hvis mit array f.eks. ser ud som nedenfor:
[23, 45, 12, 67]
Og svaret fra mit AJAX-opkald er 34
, vil jeg have det opdaterede array til at se ud som følgende:
[34, 23, 45, 12, 67]
I øjeblikket planlægger jeg at gøre det på denne måde:
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
Er der nogen bedre måde at gøre dette på? Har Javascript nogen indbygget funktionalitet, der gør dette?
Kompleksiteten af min metode er O(n)
, og det ville være virkelig interessant at se bedre implementeringer.
Brug [unshift
][1]. Det er ligesom [push
][2], bortset fra at det tilføjer elementer til begyndelsen af arrayet i stedet for til slutningen.
unshift
/push
- tilføjer et element til begyndelsen/enden af et arrayshift
/pop
- fjerner og returnerer det første/sidste element i et arrayEt simpelt 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
Tjek [MDN Array-dokumentation][3]. Stort set alle sprog, der har mulighed for at skubbe/opsætte elementer fra et array, vil også have mulighed for at fjerne/skifte (nogle gange kaldet push_front
/pop_front
) elementer, du bør aldrig selv skulle være nødt til at implementere disse.
Som påpeget i kommentarerne, kan du, hvis du vil undgå at mutere dit oprindelige array, bruge [concat
][4], som sammenkæder to eller flere arrays. Du kan bruge dette til funktionelt at skubbe et enkelt element på forsiden eller bagsiden af et eksisterende array; for at gøre dette skal du gøre det nye element til et array med et enkelt element:
const array = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 2, 1 ]
```
`concat` kan også tilføje elementer. Argumenterne til `concat` kan være af en hvilken som helst type; de er implicit pakket ind i et array med et enkelt element, hvis de ikke allerede er et array:
````javascript
const array = [ 3, 2, 1 ]
const newLastElement = 0
// Begge disse linjer er ækvivalente:
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0] // [ 3, 2, 1, 0 ]
```
[1]:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/unshift
[2]:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/push
[3]:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array
[4]:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat
Quick Cheatsheet:
Begreberne shift/unshift og push/pop kan være lidt forvirrende, i hvert fald for folk, der ikke er bekendt med programmering i C.
Hvis du ikke er bekendt med sproget, er her en hurtig oversættelse af alternative udtryk, som måske er lettere at 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 )