Array.prototype.flat()
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020 .
Метод flat() возвращает новый массив, в котором все элементы вложенных подмассивов были рекурсивно «подняты» на указанный уровень depth.
Синтаксис
var newArray = arr.flat(depth);
Параметры
depth Необязательный
На сколько уровней вложенности уменьшается мерность исходного массива. По умолчанию 1.
Возвращаемое значение
Новый массив с объединёнными в него подмассивами.
Примеры
Упрощение вложенных массивов
var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6] var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]; arr4.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Упрощение и «дырки» в массивах
Метод flat удаляет пустые слоты из массива:
var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5]
Альтернативы
reduce и concat
var arr1 = [1, 2, [3, 4]]; arr1.flat(); // В одномерный массив arr1.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4] //или const flatSingle = (arr) => [].concat(. arr);
// Для развёртывания многомерных массивов используем рекурсию, reduce и concat const arr = [1, 2, [3, 4, [5, 6]]]; function flatDeep(arr, d = 1) return d > 0 ? arr.reduce( (acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [], ) : arr.slice(); > flatDeep(arr, Infinity); // [1, 2, 3, 4, 5, 6]
//не рекурсивное упрощение с использованием стэка var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]]; function flatten(input) const stack = [. input]; const res = []; while (stack.length) // забираем последнее значение const next = stack.pop(); if (Array.isArray(next)) // добавляем к массиву элементы не модифицируя исходное значение stack.push(. next); > else res.push(next); > > //разворачиваем массив, чтобы восстановить порядок элементов return res.reverse(); > flatten(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
//рекурсивно упрощаем массив function flatten(array) var flattend = []; (function flat(array) array.forEach(function (el) if (Array.isArray(el)) flat(el); else flattend.push(el); >); >)(array); return flattend; >
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype.flat |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
- Array.prototype.flatMap()
- Array.prototype.map()
- Array.prototype.reduce()
- Array.prototype.concat()
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 4 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
Всё только о JavaScript
Иногда необходимо объединить несколько массивов в один, содержащий элементы из исходных массивов. Для этого в JavaScript есть метод concat . Он создаёт копию исходного массива, добавляя к нему переданные аргументы, подобно методу push . Однако, в отличие от push , если методу concat передан другой массив, то будут добавлены элементы этого массива, а не сам массив единственным элементом.
Array.prototype.toString = function() < return '[' + this.join(', ') + ']'; >; var a = [1, 2, 3]; alert(a.concat(4, 5, 6)); // [1, 2, 3, 4, 5, 6] alert(a.concat([4, 5], [6])); // [1, 2, 3, 4, 5, 6]
Однако дальше одного уровня concat аргументы-массивы не разворачивает.
Array.prototype.toString = function() < return '[' + this.join(', ') + ']'; >; var a = [1, 2, 3]; alert(a.concat([4, [5], 6])); // [1, 2, 3, 4, [5], 6]
С разреженными массивами ситуация обстоит ожидаемая: пропуски как из исходного массива, так и из массивов-аргументов, сохраняются.
Array.prototype.toString = function() < return '[' + this.join(', ') + ']'; >; var a = [1, , 3]; alert(a.concat([4, , 6])); // [1, , 3, 4, , 6]
Деление массива
Метод slice имеет сигнатуру slice(begin[, end]) и возвращает подмассив исходного массива, начиная с индекса begin и заканчивая индексом end — 1 . Чтобы легче запомнить такую странную нумерацию, лучше считать, что передаются индексы не элементов, а «межэлементного пространства».
Индексы элементов: 0 1 2 3 4 5 6 7 8 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | Индексы для slice: 0 1 2 3 4 5 6 7 8 9
Тогда становится понятно, что ar.slice(0, 1) вернёт только нулевой элемент, а slice(5, 9) — с пятого по восьмой элементы.
var a = [0, 1, 2, 3, 4, 5]; alert(a.slice(0, 2)); // 0,1 alert(a.slice(4, 5)); // 4
Если второй аргумент является отрицательным числом, то отсчёт второго индекса идёт с конца массива.
var a = [0, 1, 2, 3, 4, 5]; alert(a.slice(0, -2)); // 0,1,2,3
Если же второй аргумент не передан вообще, то возвращается копия массива от begin до конца.
var a = [0, 1, 2, 3, 4, 5]; alert(a.slice(3)); // 3,4,5
Клонирование массива
В JavaScript нет нативного метода для клонирования массивов, однако его легко сэмулировать, помня, что concat и slice не меняют исходный массив. Достаточно вызвать метод concat без аргументов или метод slice с единственным аргументом равным 0 .
var a = [1, 2, 3]; var b = a.concat(); var c = a.slice(0); alert(a + ' ; ' + b + ' ; ' + c); // 1,2,3 ; 1,2,3 ; 1,2,3 alert([a == b, a == c, b == c]); // false,false,false
Обратите внимание, если в массиве лежат ссылки на объекты, в том числе ссылки на другие массивы, то в новосозданном массиве будут лежать ссылки на те же самые объекты. Поэтому если вы хотите клонировать многомерный массив, то придётся вручную создавать новый массив, после чего перебрать подмассивы исходного массива и клонировать их в новый.
// Клонируется только массив верхнего уровня var a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var b = a.concat(); alert(a[0][1]); // 2 alert(b[0][1]); // 2 b[0][1] = 15; alert(a[0][1]); // 15 // Клонируем вложенные массивы var a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var b = []; a.forEach(function(subArray) < b.push(subArray.concat()); >); alert(a[0][1]); // 2 alert(b[0][1]); // 2 b[0][1] = 15; alert(a[0][1]); // 2
Array.prototype.concat()
Метод concat() возвращает новый массив, состоящий из массива, на котором он был вызван, соединённого с другими массивами и/или значениями, переданными в качестве аргументов.
Интерактивный пример
Синтаксис
var new_array = old_array.concat(value1[, value2[, . [, valueN]]])
Параметры
Массивы и/или значения, соединяемые в новый массив. Смотрите описание ниже.
Возвращаемое значение
Описание
Метод concat создаёт новый массив, состоящий из элементов в объекте, на котором он был вызван, за которыми по порядку следуют, для каждого аргумента, все его элементы (если аргумент является массивом), либо сам аргумент (если он массивом не является).
Метод concat не изменяет данный массив или любой из массивов, переданных в аргументах, а вместо этого возвращает поверхностную копию, содержащую копии тех элементов, что были объединены с исходными массивами. Элементы оригинальных массивов копируются в новый массив по следующим правилам:
- Ссылки на объекты (но не фактические объекты): метод concat копирует ссылки на объекты в новый массив. И оригинал, и новый массив ссылаются на один и тот же объект. То есть, если объект по ссылке будет изменён, изменения будут видны и в новом, и в исходном массивах.
- Строки, числа и булевы значения (но не объекты String , Number или Boolean ): метод concat копирует значения строк и чисел в новый массив.
Примечание: Соединение массивов и/или значений в новый массив оставит соединяемые массивы/значения неизменными. Кроме того, любая операция над новым массивом (если только элемент не является ссылкой) не будет затрагивать исходные массивы и наоборот.
Примеры
Соединение двух массивов
Следующий код соединяет два массива:
var alpha = ["a", "b", "c"], numeric = [1, 2, 3]; var alphaNumeric = alpha.concat(numeric); console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]
Соединение трёх массивов
Следующий код соединяет три массива:
var num1 = [1, 2, 3], num2 = [4, 5, 6], num3 = [7, 8, 9]; var nums = num1.concat(num2, num3); console.log(nums); // Результат: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Соединение значений в массив
Следующий код соединяет три значения в массив:
var alpha = ["a", "b", "c"]; var alphaNumeric = alpha.concat(1, [2, 3]); console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype.concat |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
- push / pop — добавление / удаление элементов с конца массива
- unshift / shift — добавление / удаление элементов с начала массива
- splice — добавление / удаление элементов в указанной позиции массива
- String.prototype.concat()
- Symbol.isConcatSpreadable — управление уменьшением размерности массива
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 4 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.
Как объединить два массива объектов в один массив?
Есть два массива объектов, их нужно объединить по следующему принципу, количество объектов в первом массиве всегда, по условию, совпадает с количеством объектов во втором массиве.
let first = [ , ] let second = [ , ] //// Результат должен быть таким [ < name: 'Maxim', secondName: 'Ivanov', age: 20 >, < name: 'Lena', secondName: 'Kirolova' , age: 18 >]
- Вопрос задан более трёх лет назад
- 4959 просмотров
Комментировать
Решения вопроса 1

Алексей Ярков @yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
let first = [ , ]; let second = [ , ]; let third = first.map((item, index) => ()); console.log(third);
Ответ написан более трёх лет назад
Нравится 2 2 комментария
Anton8989 @Anton8989 Автор вопроса

Алексей Ярков @yarkov Куратор тега JavaScript
Anton8989, пожалуйста ))
Ответы на вопрос 1

Br0k3n C1rcu1t @lookreciuspin
Data recovery and truth revelation hacker
Предлагаю прогулятся до MDN
Метод concat() возвращает новый массив, состоящий из массива, на котором он был вызван, соединённого с другими массивами и/или значениями, переданными в качестве аргументов.
Соединение двух массивов
Следующий код соединяет два массива:
var alpha = ['a', 'b', 'c'], numeric = [1, 2, 3]; var alphaNumeric = alpha.concat(numeric); console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]