From 01e7d1136e192e08a648f26ff79b91fdbcf5a709 Mon Sep 17 00:00:00 2001 From: 111111112 <70954573+mikhail-balandin@users.noreply.github.com> Date: Mon, 19 Aug 2024 02:26:23 +0500 Subject: [PATCH] [ru] improve `Web/JavaScript/Reference/Global_Objects/Array/flat` translation (#23067) * change var to const declaration according modern es standart * update examples, improve translation, remove odd sections --------- Co-authored-by: Leonid Vinogradov --- .../global_objects/array/flat/index.md | 100 ++++-------------- 1 file changed, 19 insertions(+), 81 deletions(-) diff --git a/files/ru/web/javascript/reference/global_objects/array/flat/index.md b/files/ru/web/javascript/reference/global_objects/array/flat/index.md index 7021afaf1a7e9b..88466ea7a9755d 100644 --- a/files/ru/web/javascript/reference/global_objects/array/flat/index.md +++ b/files/ru/web/javascript/reference/global_objects/array/flat/index.md @@ -5,18 +5,19 @@ slug: Web/JavaScript/Reference/Global_Objects/Array/flat {{JSRef}} -Метод **`flat()`** возвращает новый массив, в котором все элементы вложенных подмассивов были рекурсивно "подняты" на указанный уровень depth. +Метод **`flat()`** экземпляров {{jsxref("Array")}} возвращает новый массив, в котором все элементы вложенных подмассивов рекурсивно "подняты" на указанный уровень. ## Синтаксис -``` -var newArray = arr.flat(depth); +```js-nolint +flat() +flat(depth) ``` ### Параметры - `depth` {{optional_inline}} - - : На сколько уровней вложенности уменьшается мерность исходного массива. По умолчанию 1. + - : Указывает, на сколько уровней вложенности уменьшается мерность исходного массива. По умолчанию 1. ### Возвращаемое значение @@ -24,103 +25,40 @@ var newArray = arr.flat(depth); ## Примеры -### Упрощение вложенных массивов +### Уплощение вложенных массивов ```js -var arr1 = [1, 2, [3, 4]]; +const arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] -var arr2 = [1, 2, [3, 4, [5, 6]]]; +const arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] -var arr3 = [1, 2, [3, 4, [5, 6]]]; +const 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]]]]]; +const 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() для разреженных массивов -Метод flat удаляет пустые слоты из массива: +Метод `flat()` удаляет пустые слоты в массивах: ```js -var arr4 = [1, 2, , 4, 5]; -arr4.flat(); -// [1, 2, 4, 5] -``` - -## Альтернативы +const arr5 = [1, 2, , 4, 5]; +console.log(arr5.flat()); // [1, 2, 4, 5] -### `reduce` и `concat` - -```js -var arr1 = [1, 2, [3, 4]]; -arr1.flat(); - -// В одномерный массив -arr1.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4] - -//или -const flatSingle = (arr) => [].concat(...arr); -``` +const array = [1, , 3, ["a", , "c"]]; +console.log(array.flat()); // [ 1, 3, "a", "c" ] -```js -// Для развёртывания многомерных массивов используем рекурсию, 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] -``` - -```js -//не рекурсивное упрощение с использованием стэка -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] -``` - -```js -//рекурсивно упрощаем массив -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; -} +const array2 = [1, , 3, ["a", , ["d", , "e"]]]; +console.log(array2.flat()); // [ 1, 3, "a", ["d", empty, "e"] ] +console.log(array2.flat(2)); // [ 1, 3, "a", "d", "e"] ``` ## Спецификации