Как вставить элемент в массив по указанному индексу в JavaScript?
Использование метода splice() — стандартное решение
В JavaScript для вставки элемента в произвольную позицию массива существует встроенный метод splice(). Он изменяет содержимое массива, удаляя, заменяя или добавляя элементы. Главное преимущество — он работает напрямую с исходным массивом и автоматически сдвигает элементы.
Синтаксис для вставки
array.splice(index, 0, element1, element2, ...)
- index — индекс, начиная с которого будут вставляться элементы.
- 0 — количество удаляемых элементов (0 означает, что ничего не удаляется).
- element1, element2, ... — элементы для вставки (можно вставить один или несколько).
Пример для вашей задачи
let arr = [1, 2, 4, 5];
arr.splice(2, 0, 3); // Вставляем число 3 на позицию с индексом 2
console.log(arr); // [1, 2, 3, 4, 5]
Как это работает: метод берёт массив, находит позицию с индексом 2 (где сейчас находится число 4), сдвигает все элементы, начиная с этой позиции, вправо, и вставляет новое значение. В результате массив увеличивается на один элемент.
Вставка нескольких элементов
let colors = ['red', 'green', 'blue'];
colors.splice(1, 0, 'yellow', 'pink');
console.log(colors); // ['red', 'yellow', 'pink', 'green', 'blue']
Важные особенности
- Изменение исходного массива:
splice()мутирует (изменяет) исходный массив. Если нужно сохранить оригинал, сначала сделайте копию:let copy = [...arr];. - Возвращаемое значение: метод возвращает массив удалённых элементов. При вставке с параметром
0он вернёт пустой массив. - Отрицательные индексы: можно использовать отрицательные значения для отсчёта с конца массива. Например,
arr.splice(-1, 0, 'new')вставит элемент перед последним. - Индекс за пределами длины: если указать индекс больше длины массива, элемент будет вставлен в конец.
Альтернатива без мутации (чистая функция)
Если вы предпочитаете не изменять исходный массив, можно использовать slice() и конкатенацию:
function insertAt(arr, index, ...elements) {
return [
...arr.slice(0, index),
...elements,
...arr.slice(index)
];
}
let original = [1, 2, 4, 5];
let newArr = insertAt(original, 2, 3);
console.log(newArr); // [1, 2, 3, 4, 5]
console.log(original); // [1, 2, 4, 5] — без изменений
Метод splice() — это самый простой и производительный способ для вставки элементов. Он поддерживается всеми современными браузерами и средами Node.js. Используйте его, когда нужно быстро и наглядно модифицировать массив.
Использование toSpliced() — современный подход (ES2023+)
Начиная с ES2023 (современный стандарт JavaScript), появился метод toSpliced(). Он работает как splice(), но не изменяет исходный массив, а возвращает новый. Это удобно в функциональном программировании и при работе с иммутабельными данными.
Пример
let arr = [1, 2, 4, 5];
let newArr = arr.toSpliced(2, 0, 3);
console.log(newArr); // [1, 2, 3, 4, 5]
console.log(arr); // [1, 2, 4, 5] — исходный не изменился
Когда использовать?
- Если вы работаете с React или Redux и не хотите мутировать состояние.
- Если нужно сохранить оригинальный массив для дальнейшего использования.
- В цепочках методов, где важна чистота функций.
Ограничения
Метод toSpliced() пока поддерживается не во всех средах (требуются современные браузеры или Node.js 20+). Для старых проектов используйте splice() или комбинацию slice() + spread-оператор, как показано в первом ответе.
Выбор между splice() и toSpliced() зависит от ваших потребностей: первый — для прямого изменения, второй — для создания новой копии. Оба решают задачу вставки элемента по индексу.