Array.prototype.flat
Массив в этом примере имеет несколько уровней вложенности: он содержит массив, который, в свою очередь, содержит другой массив.
const array = [1, [2, [3]]];
Array#flat возвращает одномерную версию многомерного массива.
array.flat();
array.flat(1);
Глубина по умолчанию равна 1, но можно указать любое число для рекурсивного свёртывания до этой глубины. Чтобы продолжать свёртывание рекурсивно, пока в результате не останется вложенных массивов, нужно передать Infinity.
Почему этот метод называется Array.prototype.flat, а не Array.prototype.flatten? Прочтите наш разбор #SmooshGate, чтобы узнать!
Array.prototype.flatMap
Вот ещё один пример. У нас есть функция duplicate, которая принимает значение и возвращает массив, содержащий это значение дважды. Если применить duplicate к каждому значению массива, получится вложенный массив.
const duplicate = (x) => [x, x];
[2, 3, 4].map(duplicate);
Затем можно вызвать flat для результата, чтобы свести массив:
[2, 3, 4].map(duplicate).flat();
Поскольку этот шаблон очень распространён в функциональном программировании, для него теперь существует специальный метод flatMap.
[2, 3, 4].flatMap(duplicate);
flatMap немного эффективнее, чем выполнение map, за которым следует flat по отдельности.
Интересуетесь вариантами использования flatMap? Ознакомьтесь с объяснением Акселя Раушмайера.
Поддержка Array#{flat,flatMap}