Объединение массивов – это распространённая задача, с которой сталкиваются разработчики. Важно знать, как это делать правильно, чтобы избежать неожиданных результатов.
Проблемы поверхностного подхода
Представим, что у нас есть два массива: [1, 2, 3] и [4, 5, 6]. Мы ожидаем, что результатом их объединения будет массив [1, 2, 3, 4, 5, 6]. Однако, попытка использовать оператор сложения (+) или метод .push() не даст желаемого результата:
let a = [1, 2, 3];
let b = [4, 5, 6];
console.log(a + b); // "1,2,34,5,6"
console.log(a.push(b)); // [1, 2, 3, [4, 5, 6]]
- В первом случае, оператор
+приводит массивы к строкам и объединяет их, что приводит к некорректному результату. - Во втором случае, метод
.push()добавляет массивbкак единый элемент в массивa.
Корректные способы объединения массивов
Для правильного объединения массивов следует использовать метод .concat() или оператор расширения ....
Метод .concat()
Метод .concat() позволяет объединить любое количество массивов:
let a = [1, 2, 3];
let b = [4, 5, 6];
let c = a.concat(b);
console.log(c); // [1, 2, 3, 4, 5, 6]
Оператор расширения
Оператор расширения ..., введённый в ES6, «распаковывает» элементы массивов, объединяя их в новый массив:
let a = [1, 2, 3];
let b = [4, 5, 6];
let c = [...a, ...b];
console.log(c); // [1, 2, 3, 4, 5, 6]
Какой способ лучше?
Выбор метода зависит от ситуации. Оператор расширения выглядит более гибким и предпочтительным, особенно когда требуется вносить дополнительные изменения в массивы. Метод .concat() можно использовать, когда нужно объединить массивы без изменений.
Пример добавления элементов
Рассмотрим пример, когда нужно объединить массивы [1, 2, 3] и [4, 5, 6] и добавить в начало массив [0, 0, 0]:
let a = [1, 2, 3];
let b = [4, 5, 6];
let c = [0, 0, 0].concat(a, b);
let d = [0, 0, 0, ...a, ...b];
console.log(c); // [0, 0, 0, 1, 2, 3, 4, 5, 6]
console.log(d); // [0, 0, 0, 1, 2, 3, 4, 5, 6]
Заключение
Использование оператора расширения или метода .concat() обеспечивает корректное объединение массивов. Оператор расширения более гибок и удобен для динамических изменений, тогда как метод .concat() подходит для простого объединения массивов. Выбирайте подходящий метод в зависимости от задач и требований вашего проекта.







