Как я могу добавить новые элементы массива в начале массива в 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) и было бы действительно интересно увидеть лучшие реализации.

780   10  

10 ответов:

использовать 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 документация. Практически каждый язык, который имеет возможность нажимать / pop элементы из массива, также будет иметь возможность unshift / shift (иногда называемый push_front/pop_front) элементы, вы никогда не должны реализовать их самостоятельно.

array operations image

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

в ES6 используйте оператор spread ...:

демо

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

console.log(arr)

другой способ сделать это через 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

Быстрый 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 ) 

у вас есть массив: var arr = [23, 45, 12, 67];

добавить элемент в начало, вы хотите использовать splice:

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

push() добавляет новый элемент в конец массива.
pop() удаляет элемент из конца массива.

unshift() добавляет новый элемент в начало массива.
shift() удаляет элемент из начала массива.

использовать theArray.unshift(response)

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

Если вам нужно постоянно вставлять элемент в начале массива, то быстрее использовать push заявления с последующим вызовом reverse, вместо unshift все время.

тест:http://jsben.ch/kLIYf

С помощью пуш, соединения, и индекс сначала вставляем элемент в массив

arrName.push('newName1');
arrName.splice(0, 0,'newName1');
arrName[0] = 'newName1';

Comments

    Ничего не найдено.