Array.prototype.flatMap()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 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
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 |