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}