Вопрос: Как добавить новые элементы массива в начале массива в JavaScript?


Мне нужно добавить или добавить элементы в начале массива.

Например, если мой массив выглядит следующим образом:

[23, 45, 12, 67]

И ответ от моего вызова AJAX 34, Я хочу, чтобы обновленный массив выглядел следующим образом:

[34, 23, 45, 12, 67]

В настоящее время я планирую сделать это следующим образом:

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

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

theArray = newArray;
delete newArray;

Есть ли лучший способ сделать это? У JavaScript есть встроенная функциональность, которая делает это?

Сложность моего метода O(n)и было бы действительно интересно увидеть лучшие реализации.


1117


источник


Ответы:


использование unshift, Это как push, за исключением того, что добавляет элементы к началу массива, а не к концу.

  • unshift/ push- добавить элемент в начало / конец массива
  • shift/ pop- удалить и вернуть первый / последний элемент и массив

Простая диаграмма ...

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

и график:

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

Проверьте Документация массива MDN , Практически каждый язык, который имеет возможность выталкивать / выталкивать элементы из массива, также будет иметь возможность unshift / shift (иногда называемый push_front/ pop_front), вам никогда не придется реализовывать их самостоятельно.


2083



array operations image

var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]


1145



С ES6 используйте оператор с расширением ...:

DEMO

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

console.log(arr)


117



Другой способ сделать это через concat

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

Разница между concatа также unshiftв том, что concatвозвращает новый массив. Эффективность между ними можно найти Вот ,

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

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

Вот результат теста

enter image description here


48



Быстрый Cheatsheet:

Термины shift / unshift и push / pop могут быть немного запутанными, по крайней мере, для людей, которые могут быть не знакомы с программированием на C.

Если вы не знакомы с жаргоном, вот быстрый перевод альтернативных терминов, которые легче запомнить:

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

* array_push()     -  (aka Append ;; InsertAfter   ;; InsertAtEnd )     
* array_pop()      -  (aka UnAppend ;; RemoveAfter   ;; RemoveFromEnd ) 

37



you have an array: var arr = [23, 45, 12, 67];

To add an item to the beginning, you want to use splice:

var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);


13



If you need to continuously insert an element at the beginning of an array, it is faster to use push statements followed by a call to reverse, instead of calling unshift all the time.

Benchmark test: http://jsben.ch/kLIYf


1



var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata]; 
console.log(testdata)
    


0



push() adds a new element to the end of an array.
pop() removes an element from the end of an array.

unshift() adds a new element to the beginning of an array.
shift() removes an element from the beginning of an array.

use theArray.unshift(response)


0