it-swarm.com.ru

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

1286
Moon

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

2414
meagar

array operations image

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

1273
Maksym

В ES6 используйте оператор распространения ...:

ДЕМО

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

console.log(arr)

171
Abdennour TOUMI

Еще один способ сделать это через 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

62
zangw

Quick 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 ) 
42
dreftymac

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

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

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

15
ozimax06

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

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

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

9
Harunur Rashid

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

5
Tirkesh Turkesh
var array = [23, 45, 12, 67];  
array.unshift(11);  
alert(array);
4
techdeepak

Без мутирования

На самом деле, все unshift/Push и shift/pop mutate массив Origin.

unshift/Push добавляет элемент в существующий массив из begin/end, а shift/pop удаляет элемент из начала/конца массива.

Но есть способ добавить элементы в массив без мутации. В результате получается новый массив, для добавления в конец массива используйте код ниже:

const originArray = ['one', 'two', 'three'];
const newItem = 4;
const newArray = originArray.concat(newItem);

Для добавления в начало оригинального массива используйте код ниже:

const originArray = ['one', 'two', 'three'];
const newItem = 0;
const newArray = (originArray.reverse().concat(newItem)).reverse();

Вышеописанным способом вы добавляете в начало/конец массива без мутации.

3
AmerllicA

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

Контрольный тест:http://jsben.ch/kLIYf

3
Jenny O'Reilly

Используя splice, мы вставляем элемент в массив в начале:

arrName.splice( 0, 0, 'newName1' );
0
Srikrushna Pal