Как добавить новые элементы массива в начале массива в 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)
и было бы действительно интересно увидеть лучшие реализации.
Ответы
Ответ 1
Используйте 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
) элементы, вам никогда не придется реализовывать их самостоятельно.
Как указано в комментариях, если вы хотите избежать изменения исходного массива, вы можете использовать concat
, который объединяет два или более массивов вместе. Вы можете использовать это, чтобы функционально выдвинуть один элемент в начало или конец существующего массива; для этого вам нужно превратить новый элемент в массив из одного элемента:
const array = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
concat
также может добавлять элементы. Аргументы для concat
могут быть любого типа; они неявно заключены в одноэлементный массив, если они еще не являются массивом:
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 ]
Ответ 2
var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
Ответ 3
С помощью ES6 используйте оператор распространения ...
:
DEMO
var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]
console.log(arr)
Ответ 4
Другой способ сделать это через concat
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));
Ответ 5
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 )
Ответ 6
у вас есть массив: var arr = [23, 45, 12, 67];
Чтобы добавить элемент в начало, вы хотите использовать splice
:
var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
Ответ 7
push()
добавляет новый элемент в конец массива.
pop()
удаляет элемент из конца массива.
unshift()
добавляет новый элемент в начало массива.
shift()
удаляет элемент из начала массива.
используйте theArray.unshift(response)
Ответ 8
var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata];
console.log(testdata)
Ответ 9
Без мутирования
На самом деле, все unshift
/push
и shift
/pop
мутировать массив происхождения.
unshift
/push
добавляет элемент в существующий массив из начала/конца, а 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();
Вышеописанным способом вы добавляете в начало/конец массива без мутации.
Ответ 10
var array = [23, 45, 12, 67];
array.unshift(11);
alert(array);
Ответ 11
Если вам нужно постоянно вставлять элемент в начале массива, быстрее использовать push
операторы, за которыми следует вызов для reverse
вызова, а не для вызова unshift
все время.
Тест производительности: http://jsben.ch/kLIYf
Ответ 12
У нас есть функция, называемая unshift в javascript для добавления элемента в начало массива.
var a = ["a1","a2","a3"];
a.unshift("a0"); // add element in array of first position
console.log(a)
a.shift("a0"); // remove element in array of first position
console.log(a);
a.push("a0"); // add element in array of last position
console.log(a);
a.pop("a0"); // remove element in array of last position
console.log(a);
Ответ 13
Используя splice
мы вставляем элемент в массив в начале:
arrName.splice( 0, 0, 'newName1' );
Ответ 14
Вот простое решение, в котором вы выбираете элемент из списка и перемещаете его вверх.
private moveUserUp(managedList: ISelectOption[]): ISelectOption[] {
this.getUser = managedList.filter(fetchName => fetchName.name ===
"Myself"); //fetching the item from the list that needs to be on top
managedList = managedList.filter(item => item.name !== "Myself");
//removing the item from the list
var selectedUserDetails = <App.Controls.ISelectOption>
{
id: this.getUser[0].id,
name: this.getUser[0].name
};
managedList.unshift(selectedUserDetails);
//adding the item at the top
return managedList;
}