Как сделать вложенный массив плоским
Короткий ответ
flat() поднимает элементы вложенных массивов на один уровень:
console.log([[1, 2], [3, 4], [5]].flat());Результат:
[
1,
2,
3,
4,
5
]Любая глубина
Аргумент задаёт глубину. Infinity раскрывает всё:
const nested = [1, [2, [3, [4]]]];
console.log(nested.flat().length);
console.log(nested.flat(Infinity).join(', '));Результат:
3
1, 2, 3, 4map и flat сразу
flatMap() превращает каждый элемент в массив и объединяет результаты:
const orders = [
{ items: ['tea', 'cake'] },
{ items: ['coffee'] },
];
console.log(orders.flatMap((order) => order.items).join(', '));Результат:
tea, cake, coffeeЧастая ошибка
flat() без аргумента раскрывает только один уровень:
console.log(JSON.stringify([1, [2, [3]]].flat()));Результат:
[1,2,[3]]Функции из этого ответа
- Array.prototype.flat — Раскрывает вложенные массивы в один.
- Array.prototype.flatMap — Применяет функцию к каждому элементу и раскрывает результат на один уровень.