--- title: Array.prototype.flatMap() slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap ---
Метод flatMap() сначала применяет функцию к каждому элементу, а затем преобразует полученный результат в плоскую структуру и помещает в новый массив. Это идентично map функции, с последующим применением функции flat с параметром depth ( глубина ) равным 1, но flatMap часто бывает полезным, так как работает немного более эффективно.
\{{EmbedInteractiveExample("pages/js/array-flatmap.html")}}
Исходный код данного примера расположен в GitHub репозитории. Если вы хотите улучшить этот пример, вам нужно склонировать https://github.com/mdn/interactive-examples внести в него измения и отправить их нам через PR ( pull request ).
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
// возвращает элемент для new_array
}[, thisArg])
callbackcurrentValueindex{{optional_inline}}array{{optional_inline}}thisArg{{optional_inline}}this при вызове функции callback.Новый массив, каждый элемент которого является результатом выполнения функции callback и "поднят" на уровень 1.
Смотрите {{jsxref("Array.prototype.map()")}} для детального описания callback функции. Метод flatMap идентичен методу map с последующим вызовом flat с параметром depth 1.
map и flatMaplet arr1 = x => [x * 2] // [[2], [4], [6], [8]] arr1.flatMap(x => [x * 2] // выравнивается только один уровень 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(" ")
Обратите внимание, длина списка вывода может отличаться от длины списка ввода.
reduce and concatvar arr1 = arr1.flatMap(x => [x * 2] // is equivalent to arr1.reduce((acc, x) => acc.concat([x * 2]
| Спецификация | Статус | Комментарий |
|---|---|---|
| {{SpecName('ES6', '#sec-array.prototype.flatmap', 'Array.prototype.flatMap')}} | {{Spec2('ES6')}} |
{{Compat("javascript.builtins.Array.flatMap")}}