Mam potrzebę dodawania lub przygotowywania elementów na początku tablicy.

Na przykład, jeśli moja tablica wygląda poniżej:

[23, 45, 12, 67]

A odpowiedź z mojego połączenia AJAX jest 34, chcę zaktualizować tablicę, aby być podobnym:

[34, 23, 45, 12, 67]

Obecnie planuję to zrobić:

var newArray = [];
newArray.push(response);

for (var i = 0; i < theArray.length; i++) {
    newArray.push(theArray[i]);
}

theArray = newArray;
delete newArray;

Czy jest jakiś lepszy sposób, aby to zrobić? Czy javascript ma dowolną wbudowaną funkcjonalność, która to robi?

Złożoność mojej metody jest O(n) i byłoby naprawdę interesujące, aby zobaczyć lepsze wdrożenia.

1766
Moon 10 listopad 2011, 04:35

13 odpowiedzi

Najlepsza odpowiedź

Użyj unshift. To jak {x1}}, z wyjątkiem tego, że dodaje elementy początek tablicy zamiast końca.

  • unshift / push - Dodaj element do początku / końca tablicy
  • shift / pop - Usuń i zwróć pierwszy / ostatni element tablicy

Prosty diagram ...

   unshift -> array <- push
   shift   <- array -> pop

I wykres:

          add  remove  start  end
   push    X                   X
    pop           X            X
unshift    X             X
  shift           X      X

Sprawdź Dokumentacja tablicy MDN. Praktycznie każdy język, który ma zdolność do push /p elementów z tablicy, będzie również miała możliwość rozmieszczeniu / przesunięcia (czasami nazywana elementami {X1}} / pop_front), nigdy nie powinieneś ich wdrożyć.


Jak wskazano w komentarzach, jeśli chcesz uniknąć wyładania oryginalnej tablicy, możesz użyć {x0}}, który łączy dwie lub więcej tablic razem. Możesz użyć tego, aby funkcjonalnie nacisnąć pojedynczy element do przodu lub tyłu istniejącej tablicy; Aby to zrobić, musisz obrócić nowy element do tablicy pojedynczej elementu:

const array = [ 3, 2, 1 ]

const newFirstElement = 4

const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]

concat może również dołączać przedmioty. Argumenty do concat mogą mieć dowolnego typu; Są one niejawnie owinięte w tablicy pojedynczej elementu, jeśli nie są już tablicą:

const array = [ 3, 2, 1 ]

const newLastElement  = 0

// Both of these lines are equivalent:
const newArray1 = array.concat(newLastElement)   // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ]
3069
kabirbaidhya 28 wrzesień 2020, 16:34

push() Dodaje nowy element do końca tablicy.
pop() Usuwa element z końca tablicy.

unshift() dodaje nowy element na początek tablicy.
shift() Usuwa element z początku tablicy.

Użyj theArray.unshift(response)

13
Harunur Rashid 30 maj 2018, 08:57
var array = [23, 45, 12, 67];  
array.unshift(11);  
alert(array);
11
Tiago Martins Peres 李大仁 9 kwiecień 2019, 10:53
var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata]; 
console.log(testdata)
    
9
Tirkesh Turkesh 29 maj 2018, 06:14

array operations image

var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
1489
Ruslan López 13 wrzesień 2016, 00:43

Z ES6 użyj operatora rozprzestrzeniania ...:

DEMO

var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]

console.log(arr)
262
Community 20 czerwiec 2020, 09:12

Innym sposobem na to dzięki concat

var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));

Różnica między concat i unshift jest to, że concat zwraca nową tablicę. Wydajność między nimi można znaleźć tutaj.

function fn_unshift() {
  arr.unshift(0);
  return arr;
}

function fn_concat_init() {
  return [0].concat(arr)
}

Oto wynik testu

enter image description here

78
zangw 3 listopad 2016, 11:04

Szybki oszustwa:

Warunki przesunięcia / nierozsienia i push / pop mogą być nieco mylące, przynajmniej do ludzi, którzy mogą nie znać programowania w C.

Jeśli nie jesteś zaznajomiony z Lingo, oto szybkie tłumaczenie alternatywnych terminów, które mogą być łatwiejsze do zapamiętania:

* array_unshift()  -  (aka Prepend ;; InsertBefore ;; InsertAtBegin )     
* array_shift()    -  (aka UnPrepend ;; RemoveBefore  ;; RemoveFromBegin )

* array_push()     -  (aka Append ;; InsertAfter   ;; InsertAtEnd )     
* array_pop()      -  (aka UnAppend ;; RemoveAfter   ;; RemoveFromEnd ) 
47
dreftymac 23 październik 2014, 14:18

Masz tablicę: var arr = [23, 45, 12, 67];

Aby dodać element do początku, chcesz użyć splice:

var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
20
Ruslan López 13 wrzesień 2016, 17:12

Korzystanie z destrukcji ES6: (unikając mutacji z oryginalnej tablicy)

const newArr = [item, ...oldArr]

17
Ben Adam 6 listopad 2019, 17:09

Bez mutanu

Właściwie, wszystkie unshift / push i shift / pop / pop Mutate macierzy.

unshift / push Dodaj element do istniały tablica z początku / końca i shift / pop / pop / pop Usuń element z początku / końca tablicy.

Ale istnieje kilka sposobów, aby dodać przedmioty do tablicy bez mutacji. Wynik jest nową tablicą, aby dodać do końca tablicy Użyj poniżej kodu:

const originArray = ['one', 'two', 'three'];
const newItem = 4;

const newArray = originArray.concat(newItem); // ES5
const newArray2 = [...originArray, newItem]; // ES6+

Aby dodać, aby rozpocząć oryginalną tablicę Użyj poniżej kodu:

const originArray = ['one', 'two', 'three'];
const newItem = 0;

const newArray = (originArray.slice().reverse().concat(newItem)).reverse(); // ES5
const newArray2 = [newItem, ...originArray]; // ES6+

Z powyższym sposobem, dodasz do początku / końca tablicy bez mutacji.

17
Community 20 czerwiec 2020, 09:12

Jeśli potrzebujesz ciągłego wkładania elementu na początku tablicy, jest szybszy, aby użyć instrukcji push, a następnie połączenie do reverse, zamiast dzwonić unshift przez cały czas.

Test benchmarku: http://jsben.ch/Kliyf

8
Krisztián Balla 7 czerwiec 2018, 13:12

Używanie splice Wstawiamy element do tablicy na początku:

arrName.splice( 0, 0, 'newName1' );
7
Itay Grudev 12 luty 2019, 23:49