Array.prototype.flatMap() - JavaScript | MDN
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since январь 2020 г..
Метод flatMap() сначала применяет функцию к каждому элементу, а затем преобразует полученный результат в плоскую структуру и помещает в новый массив. Это идентично map функции, с последующим применением функции flat с параметром depth ( глубина ) равным 1, но flatMap часто бывает полезным, так как работает немного более эффективно.
Синтаксис
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
// возвращает элемент для new_array
}[, thisArg])
Параметры
callback-
Функция которая производит элементы нового массива, принимает три аргумента:
currentValue-
Текущий обрабатываемый элемент массива.
indexНеобязательный-
Индекс обрабатываемого элемента в массиве.
arrayНеобязательный-
Массив по которому осуществляется обход.
thisArgНеобязательный-
Значение используемое в качестве
thisпри вызове функцииcallback.
Возвращаемое значение
Новый массив, каждый элемент которого является результатом выполнения функции callback и "поднят" на уровень 1.
Описание
Смотрите Array.prototype.map() для детального описания callback функции. Метод flatMap идентичен методу map с последующим вызовом flat с параметром depth 1.
Примеры
map и flatMap
js
let arr1 = [1, 2, 3, 4];
arr1.map((x) => [x * 2]);
// [[2], [4], [6], [8]]
arr1.flatMap((x) => [x * 2]);
// [2, 4, 6, 8]
// выравнивается только один уровень
arr1.flatMap((x) => [[x * 2]]);
// [[2], [4], [6], [8]]
Хотя результат полученный в примере выше можно было получить используя просто map, ниже мы рассмотрим пример где flatMap является более эффективным.
Давайте сгенерируем список слов из списка предложений.
js
let arr1 = ["it's Sunny in", "", "California"];
arr1.map((x) => x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]
arr1.flatMap((x) => x.split(" "));
// ["it's","Sunny","in", "", "California"]
Обратите внимание, длина списка вывода может отличаться от длины списка ввода.
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Альтернативное решение
reduce and concat
js
var arr1 = [1, 2, 3, 4];
arr1.flatMap((x) => [x * 2]);
// is equivalent to
arr1.reduce((acc, x) => acc.concat([x * 2]), []);
// [2, 4, 6, 8]
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification # sec-array.prototype.flatmap |