JS метод Array.concat()
Опис
Метод concat
формує новий масив. Початково, цей масив заповнюється елементами об'єкта, на якому було викликано concat
. Наступно, елементи кожного переданого аргументу додаються до цього масиву. Для базових об'єктів та примітивів сам аргумент додається як елемент цільового масиву. Тоді як для масивів або об'єктів, що мають властивість Symbol.isConcatSpreadable
з істинним значенням, всі їхні елементи додаватимуться окремо до кінцевого масиву. Важливо зазначити, що метод concat
не обробляє масиви рекурсивно.
Метод concat
створює поверхневу копію. Він не модифікує ні сам первісний об'єкт (this
), ні масиви, передані йому як аргументи. Замість цього, метод повертає новий масив, який містить елементи з усіх вхідних масивів.
Якщо деякі комірки в оригінальних масивах порожні, метод concat
збереже ці порожні позиції в результуючому масиві.
Метод concat
розглядає значення this
таким же чином, як і всі інші аргументи (за виключенням того, що спочатку воно конвертується в об'єкт). Так, прості об'єкти будуть розміщені на початку кінцевого масиву, тоді як масивоподібні з властивістю @@isConcatSpreadable
з істинним значенням будуть розширені у цільовий масив.
Нотатка: | Помітною перевагою використання методу |
Нотатка: | Метод |
Синтаксис
concat()
concat(value0)
concat(value0, value1)
concat(value0, value1, /* … ,*/ valueN)
Параметри
- *
valueN
Масиви та/або значення для об'єднання в новий масив. Якщо ж параметри
valueN
відсутні, методconcat
просто поверне поверхневу копію того масиву, з яким він працює.
Return
instance
Новий екземпляр масиву.
Переглядачі
Переглядач | |||||
---|---|---|---|---|---|
1 |
1 |
1 |
4 |
12 |
Переглядач | ||||
---|---|---|---|---|
4.4 |
18 |
4 |
1 |
Переглядач | ||
---|---|---|
0.10.0 |
1.0 |
Приклади
Даний приклад демонструє використання методу concat()
для з'єднання двох масивів. В прикладі створюються масиви array1
та array2
, після чого за допомогою методу concat()
їх елементи з'єднуються у новий масив array3
. Результат з'єднання виводиться на сторінку.
З'єднання двох масивів
const letters = ["a", "b", "c"];
const numbers = [1, 2, 3];
const alphaNumeric = letters.concat(numbers);
console.log(alphaNumeric);
// результат: ['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);
// результат: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Код з'єднує три значення з масивом.
const letters = ["a", "b", "c"];
const alphaNumeric = letters.concat(1, [2, 3]);
console.log(alphaNumeric);
// результат: ['a', 'b', 'c', 1, 2, 3]
Код з'єднує вкладені масиви і демонструє збереження посилань.
const num1 = [[1]];
const num2 = [2, [3]];
const numbers = num1.concat(num2);
console.log(numbers);
// результат: [[1], 2, [3]]
// зміна першого елемента num1
num1[0].push(4);
console.log(numbers);
// результат: [[1, 4], 2, [3]]
Метод 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 ]
Якщо будь-який з початкових масивів є розрідженим, то результуючий масив також буде розрідженим.
console.log([1, , 3].concat([4, 5])); // [1, empty, 3, 4, 5]
console.log([1, 2].concat([3, , 5])); // [1, 2, 3, empty, 5]
Якщо значення 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, // ігнорується concat(), оскільки length дорівнює 2
};
console.log(Array.prototype.concat.call(arrayLike, 3, 4)); // [1, 2, 3, 4]