Array.prototype.concat()
Базовая версия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод concat() экземпляров Array используется для объединения двух или более массивов. Этот метод не изменяет существующие массивы, а возвращает новый массив.
Попробовать
const array1 = ["a", "b", "c"]; const array2 = ["d", "e", "f"]; const array3 = array1.concat(array2); console.log(array3); // Expected output: Array ["a", "b", "c", "d", "e", "f"]
Синтаксис
concat() concat(value1) concat(value1, value2) concat(value1, value2, /* …, */ valueN)
Параметры
-
value1, …,valueNНеобязательно - Массивы и/или значения, которые нужно объединить в новый массив. Если все параметры
valueNопущены,concatвозвращает поверхностную копию существующего массива, для которого он был вызван. Подробнее см. в описании ниже.
Возвращаемое значение
Новый экземпляр Array.
Описание
Метод concat создаёт новый массив. Сначала массив заполняется элементами объекта, для которого он был вызван. Затем для каждого аргумента его значение конкатенируется в массив — для обычных объектов или примитивов сам аргумент становится элементом итогового массива; для массивов или массивоподобных объектов со свойством Symbol.isConcatSpreadable, установленным в истинное значение (truthy value), каждый элемент аргумента будет независимо добавлен в итоговый массив. Метод concat не выполняет рекурсивный обход вложенных аргументов-массивов.
Метод concat() является методом копирования. Он не изменяет this или какие-либо массивы, предоставленные в качестве аргументов, но вместо этого возвращает поверхностную копию, которая содержит те же элементы, что и исходные массивы.
Метод concat() сохраняет пустые слоты, если какой-либо из исходных массивов является разреженным.
Метод concat() является обобщённым. Значение this обрабатывается так же, как и другие аргументы (за исключением того, что оно сначала будет преобразовано в объект), что означает, что простые объекты будут непосредственно добавлены в результирующий массив, в то время как массивоподобные объекты с истинным значением [Symbol.isConcatSpreadable] будут развёрнуты (spread) в результирующий массив.
Примеры
Объединение двух массивов
Следующий код объединяет два массива:
const letters = ["a", "b", "c"]; const numbers = [1, 2, 3]; const alphaNumeric = letters.concat(numbers); console.log(alphaNumeric); // results in ['a', 'b', 'c', 1, 2, 3]
Объединение трёх массивов
Следующий код объединяет три массива:
const num1 = [1, 2, 3]; const num2 = [4, 5, 6]; const num3 = [7, 8, 9]; const numbers = num1.concat(num2, num3); console.log(numbers); // results in [1, 2, 3, 4, 5, 6, 7, 8, 9]
Объединение значений с массивом
Следующий код объединяет три значения с массивом:
const letters = ["a", "b", "c"]; const alphaNumeric = letters.concat(1, [2, 3]); console.log(alphaNumeric); // results in ['a', 'b', 'c', 1, 2, 3]
Объединение вложенных массивов
Следующий код объединяет вложенные массивы и демонстрирует сохранение ссылок:
const num1 = [[1]]; const num2 = [2, [3]]; const numbers = num1.concat(num2); console.log(numbers); // results in [[1], 2, [3]] // modify the first element of num1 num1[0].push(4); console.log(numbers); // results in [[1, 4], 2, [3]]
Объединение массивоподобных объектов с помощью Symbol.isConcatSpreadable
concat по умолчанию не обрабатывает все массивоподобные объекты как массивы — только если Symbol.isConcatSpreadable установлен в истинное значение (например, true).
const obj1 = { 0: 1, 1: 2, 2: 3, length: 3 };
const obj2 = { 0: 1, 1: 2, 2: 3, length: 3, [Symbol.isConcatSpreadable]: true };
console.log([0].concat(obj1, obj2));
// [ 0, { '0': 1, '1': 2, '2': 3, length: 3 }, 1, 2, 3 ]
Использование concat() на разреженных массивах
Если какой-либо из исходных массивов разрежен, результирующий массив также будет разреженным:
console.log([1, , 3].concat([4, 5])); // [1, empty, 3, 4, 5] console.log([1, 2].concat([3, , 5])); // [1, 2, 3, empty, 5]
Вызов concat() для не-массивов
Если значение this не является массивом, оно преобразуется в объект, а затем обрабатывается так же, как аргументы для concat(). В этом случае возвращаемое значение всегда представляет собой простой новый массив.
console.log(Array.prototype.concat.call({}, 1, 2, 3)); // [{}, 1, 2, 3]
console.log(Array.prototype.concat.call(1, 2, 3)); // [ [Number: 1], 2, 3 ]
const arrayLike = {
[Symbol.isConcatSpreadable]: true,
length: 2,
0: 1,
1: 2,
2: 99, // ignored by concat() since length is 2
};
console.log(Array.prototype.concat.call(arrayLike, 3, 4)); // [1, 2, 3, 4]
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
concat |
1 |
12 |
1 |
4 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
1 |
1 |
1.0.0 |
1.0 |
0.10.0 |
Смотрите также
- Полифил
Array.prototype.concatвcore-jsс исправлениями и реализацией современного поведения, такого как поддержкаSymbol.isConcatSpreadable - Полифил es-shims для
Array.prototype.concat - Руководство по индексированным коллекциям
ArrayArray.prototype.push()Array.prototype.unshift()Array.prototype.splice()String.prototype.concat()Symbol.isConcatSpreadable
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat