Avatar ·

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

Всем привет! Я только начал изучать JavaScript и столкнулся с такой проблемой. У меня есть массив с числами, например: `let numbers = [2, 3, 4, 5];`. Я хочу добавить в него число `1` в самое начало, чтобы получилось `[1, 2, 3, 4, 5]`. Я знаю, что для добавления в конец массива есть метод `push()`, и я его использую: `numbers.push(6)` — и всё работает отлично, элемент добавляется в конец. Но как быть, если нужно вставить элемент в начало? Я пробовал написать `numbers[0] = 1`, но это заменяет первый элемент, а не добавляет новый. То есть массив становится `[1, 3, 4, 5]`, а мне нужно, чтобы все старые элементы сдвинулись вправо. Я слышал, что есть какой-то метод `unshift()`, но не уверен, правильно ли я его понял. И ещё вопрос: если я хочу добавить сразу несколько элементов в начало, это тоже можно сделать? Например, из `[3, 4]` получить `[1, 2, 3, 4]`? Буду благодарен за подробное объяснение с примерами. Заранее спасибо! <<>>

Используйте метод unshift() для добавления элементов в начало массива

В JavaScript для добавления одного или нескольких элементов в начало массива существует встроенный метод unshift(). Он работает аналогично методу push(), но вместо добавления в конец добавляет элементы в начало, сдвигая все существующие элементы вправо.

Синтаксис и примеры

Метод unshift() принимает один или несколько аргументов и вставляет их в начало массива. Возвращает новую длину массива.

// Добавление одного элемента
let numbers = [2, 3, 4, 5];
numbers.unshift(1);
console.log(numbers); // [1, 2, 3, 4, 5]

// Добавление нескольких элементов
let fruits = ['banana', 'orange'];
fruits.unshift('apple', 'grape');
console.log(fruits); // ['apple', 'grape', 'banana', 'orange']

// Проверка возвращаемого значения
let arr = [10, 20];
let newLength = arr.unshift(5);
console.log(newLength); // 3 (новая длина массива)
console.log(arr);       // [5, 10, 20]

Важные особенности метода unshift()

  • Изменяет исходный массив — метод работает "на месте" (in-place), мутируя оригинальный массив. Это значит, что после вызова unshift() исходный массив изменяется.
  • Может принимать любое количество аргументов — вы можете добавить сразу несколько элементов, перечислив их через запятую.
  • Порядок добавления — элементы вставляются в том порядке, в котором они перечислены. Если вызвать arr.unshift(a, b), то сначала в массиве окажется a, затем b, а потом старые элементы.
  • Производительность — метод unshift() работает медленнее, чем push(), особенно на больших массивах, потому что ему нужно сдвинуть все существующие элементы вправо. Для очень больших массивов (десятки тысяч элементов) это может быть заметно.

Альтернативный способ: использование spread-оператора (ES6+)

Если вы не хотите мутировать исходный массив, а создать новый, можно использовать spread-оператор ...:

let original = [2, 3, 4];
let newArray = [1, ...original];
console.log(newArray);  // [1, 2, 3, 4]
console.log(original);  // [2, 3, 4] (не изменился)

Этот подход создаёт новый массив, не затрагивая исходный, что часто предпочтительнее в функциональном программировании.

Что делать, если нужно добавить элемент в начало, но массив очень большой?

Для массивов с десятками тысяч элементов unshift() может быть неэффективным. В таких случаях рассмотрите:

  • Использование связных списков (если структура данных позволяет).
  • Переворот массива: добавляйте в конец, а потом переворачивайте.
  • Использование TypedArray или других структур данных для критичных по производительности задач.

Однако для 99% повседневных задач (массивы до 10 000 элементов) unshift() работает вполне приемлемо.

<<>>

Альтернативный подход: метод splice()

Метод splice() — это универсальный инструмент для работы с массивами. Он может добавлять, удалять и заменять элементы. Чтобы добавить элемент в начало массива с помощью splice(), нужно указать индекс 0 (начало массива), удалить 0 элементов и вставить нужные элементы:

let arr = [2, 3, 4];
arr.splice(0, 0, 1);
console.log(arr); // [1, 2, 3, 4]

// Добавление нескольких элементов
arr.splice(0, 0, -1, 0);
console.log(arr); // [-1, 0, 1, 2, 3, 4]

Сравнение с unshift()

  • splice(0, 0, ...) делает то же самое, что и unshift(), но синтаксически более громоздок.
  • unshift() читается проще и понятнее для начинающих.
  • splice() полезен, когда нужно одновременно удалить элементы и добавить новые, но для простого добавления в начало лучше использовать unshift().

Когда использовать splice()?

Если вам нужно не только добавить элемент в начало, но и удалить несколько первых элементов, splice() может быть удобнее. Например, удалить первые 2 элемента и добавить 3 новых:

let data = [10, 20, 30, 40];
data.splice(0, 2, 1, 2, 3);
console.log(data); // [1, 2, 3, 30, 40]

Но для 99% случаев, когда нужно просто добавить элемент в начало, используйте unshift() — это стандартный и самый читаемый способ.