У меня есть необходимость добавить или дописать элементы в начало массива.
Например, если мой массив выглядит следующим образом:
[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)
, и было бы действительно интересно увидеть лучшие реализации.
Используйте 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 Array documentation. Практически каждый язык, имеющий возможность выталкивать/выталкивать элементы из массива, также имеет возможность сдвигать/сдвигать (иногда называемые push_front
/pop_front
) элементы, вам никогда не придется реализовывать их самостоятельно.
Как было указано в комментариях, если вы хотите избежать изменения исходного массива, вы можете использовать concat
, который объединяет два или более массивов вместе. Вы можете использовать это для функционального перемещения одного элемента на переднюю или заднюю часть существующего массива; для этого вам нужно превратить новый элемент в одноэлементный массив:
``javascript const array = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
`concat` также может добавлять элементы. Аргументы `concat` могут быть любого типа; они неявно обернуты в одноэлементный массив, если они еще не являются массивом:
``javascript
const array = [ 3, 2, 1 ]
const newLastElement = 0
// Обе эти строки эквивалентны:
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ]
...
:Демо
в
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)
}
Вот результат теста
Быстрая шпаргалка:
Термины 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 )
`метод push () добавляет новый элемент в конец массива. поп () удаляет элемент из конца массива.
`unshift по () добавляет новый элемент в начало массива. клавишу Shift () удаляет элемент из начала массива.
использовать массив.unshift по(ответ)`
в
var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata];
console.log(testdata)
в
в
На самом деле, все unshift по/
толкатьи
смена/
поп` мутирует массив происхождения.
В unshift по
/нажмите
добавить элемент в массив существовал от начала/конца и "Shift" / " поп " удалить элемент из начала/конца массива.
Но есть способ, чтобы добавить элементы в массив без изменений. в результате создается новый массив, чтобы добавить в конец массива использовать ниже код:
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();
С указанным выше способом, можно добавить в начало/конец массива без мутации.
var array = [23, 45, 12, 67];
array.unshift(11);
alert(array);
Если вам нужно постоянно вставить элемент в начало массива, это быстрее, чтобы использовать "толчок" заявлений, сопровождается звонком реверс
, вместо `unshift по все время.
Тест: http://jsben.ch/kLIYf
Используя сращивания
мы вставить элемент в массив в begnning:
Яш arrName.метод Splice( 0, 0, 'newName1' );