From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/array/flatmap/index.html | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/array/flatmap/index.html (limited to 'files/ru/web/javascript/reference/global_objects/array/flatmap') diff --git a/files/ru/web/javascript/reference/global_objects/array/flatmap/index.html b/files/ru/web/javascript/reference/global_objects/array/flatmap/index.html new file mode 100644 index 0000000000..4465a92711 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/array/flatmap/index.html @@ -0,0 +1,126 @@ +--- +title: Array.prototype.flatMap() +slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap +--- +
{{JSRef}}
+ +

Метод flatMap() сначала применяет функцию к каждому элементу, а затем преобразует полученый результат в плоскую структуру и помещает в новый массив. Это идентично map функции, с последующим применением функции flat с параметром depth ( глубина ) равным 1, но flatMap часто бывает полезным, так как работает немного более эффективно.

+ + + + + +

Синтаксис

+ +
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
+    // возращает элемент для new_array
+}[, thisArg])
+ +

Параметры

+ +
+
callback
+
Функция которая производит элементы нового массива, принимает три аргумента: +
+
+
currentValue
+
Текущий обрабатываемый элемент массива.
+
index{{optional_inline}}
+
Индекс обрабатываемого элемента в массиве.
+
array{{optional_inline}}
+
Массив по которому осуществляется обход.
+
+
+
thisArg{{optional_inline}}
+
Значение используемое в качестве this при вызове функции callback.
+
+ +

Возвращаемое значение

+ +

Новый массив, каждый элемент которого является результатом выполнения функции callback и "поднят" на уровень 1.

+ +

Описание

+ +

Смотрите {{jsxref("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 and concat

+ +
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]
+ +

Спецификация

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-array.prototype.flatmap', 'Array.prototype.flatMap')}}{{Spec2('ES6')}}
+ +

Поддержка браузерами

+ +
+ + +

{{Compat("javascript.builtins.Array.flatMap")}}

+
+ +

См так же:

+ + -- cgit v1.2.3-54-g00ecf