From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../reference/global_objects/array/flat/index.html | 160 +++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/array/flat/index.html (limited to 'files/ru/web/javascript/reference/global_objects/array/flat/index.html') diff --git a/files/ru/web/javascript/reference/global_objects/array/flat/index.html b/files/ru/web/javascript/reference/global_objects/array/flat/index.html new file mode 100644 index 0000000000..7ce48303ea --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/array/flat/index.html @@ -0,0 +1,160 @@ +--- +title: Array.prototype.flat() +slug: Web/JavaScript/Reference/Global_Objects/Array/flat +tags: + - Массив + - Ссылка + - Экспериментальная + - метод + - прототип + - яваскрипт +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flat +--- +
{{JSRef}}
+ +

Метод flat() возвращает новый массив, в котором все элементы вложенных подмассивов были рекурсивно "подняты" на указанный уровень depth.

+ + + + + +

Синтаксис

+ +
var newArray = arr.flat(depth);
+ +

Параметры

+ +
+
depth {{optional_inline}}
+
На сколько уровней вложенности уменьшается мерность исходного массива. По-умолчанию 1.
+
+ +

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

+ +

Новый массив с объединенными в него подмассивами.

+ +

Примеры

+ +

Упрощение вложенных массивов

+ +
var arr1 = [1, 2, [3, 4]];
+arr1.flat();
+// [1, 2, 3, 4]
+
+var arr2 = [1, 2, [3, 4, [5, 6]]];
+arr2.flat();
+// [1, 2, 3, 4, [5, 6]]
+
+var arr3 = [1, 2, [3, 4, [5, 6]]];
+arr3.flat(2);
+// [1, 2, 3, 4, 5, 6]
+
+var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
+arr4.flat(Infinity);
+// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ +

Упрощение и "дырки" в массивах

+ +

Метод flat удаляет пустые слоты из массива:

+ +
var arr4 = [1, 2, , 4, 5];
+arr4.flat();
+// [1, 2, 4, 5]
+
+ +

Альтернативы

+ +

reduce и concat

+ +
var arr1 = [1, 2, [3, 4]];
+arr1.flat();
+
+// В одномерный массив
+arr1.reduce((acc, val) => acc.concat(val), []);// [1, 2, 3, 4]
+
+//или
+const flatSingle = arr => [].concat(...arr);
+
+ +
// Для развёртвания многомерных массивов используем рекурсию, reduce и concat
+const arr = [1, 2, [3, 4, [5, 6]]];
+
+function flatDeep(arr, d = 1) {
+   return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [])
+                : arr.slice();
+};
+
+flatDeep(arr, Infinity);
+// [1, 2, 3, 4, 5, 6]
+ +
//не рекурсивное упрощение с использованием стэка
+var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
+function flatten(input) {
+  const stack = [...input];
+  const res = [];
+  while (stack.length) {
+    // забираем последнее значение
+    const next = stack.pop();
+    if (Array.isArray(next)) {
+      // добавляем к массиву элементы не модифицируя исходное значение
+      stack.push(...next);
+    } else {
+      res.push(next);
+    }
+  }
+  //разворачиваем массив, чтобы восстановить порядок элементов
+  return res.reverse();
+}
+flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
+
+ +
//рекурсивно упрощаем массив
+function flatten(array) {
+  var flattend = [];
+  (function flat(array) {
+    array.forEach(function(el) {
+      if (Array.isArray(el)) flat(el);
+      else flattend.push(el);
+    });
+  })(array);
+  return flattend;
+}
+
+ + + +

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

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
Array.prototype.flat proposalКандидат (3)
+ +

Совместимость с браузерами

+ +
+ + +

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

+
+ +

Смотрите также

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