This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Array.prototype.flatMap()
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 часто бывает полезным, так как работает немного более эффективно.
In this article
Синтаксис
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
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 является более эффективным.
Давайте сгенерируем список слов из списка предложений.
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 andconcat
var arr1 = [1, 2, 3, 4];arr1.flatMap((x) => [x * 2]);// is equivalent toarr1.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> |