Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptで再帰せずに複数のネストされた配列の配列をフラット化する関数


次のような数値のネストされた配列があるとします-

const arr = [1, 4, 5, [
   5, 6, [
      6, 19, 5, [5]
   ], [5, 7, 6, [6, 8]], 8
], 6];

ネストされた配列、理想的には任意のレベルにネストされた配列を受け取るJavaScript関数を作成する必要があります。

次に、関数は、入力配列のフラット化されたバージョンではない新しい配列を準備して返す必要があります。

関数を書くときに避けるように求められる条件が2つあります-

  • コード内のどこでもカスタム再帰関数を使用することはできません。

  • コードでArray.prototype.flat()メソッドを使用することはできません。

このためのコードは-

になります
const arr = [1, 4, 5, [
   5, 6, [
      6, 19, 5, [5]
   ], [5, 7, 6, [6, 8]], 8
], 6];
const flattenWithoutRecursion = (arr = []) => {
   const res = [];
   let level = 0, ref = [arr], counter = [0];
   while(level >= 0){
      if (counter[level] >= ref[level].length) {
         level--;
         continue;
      };
      if (Array.isArray(ref[level][counter[level]])) {
         ref[level + 1] = ref[level][counter[level]]
         counter[level]++;
         level++;
         counter[level] = 0;
         continue;
      };
      res.push(ref[level][counter[level]]);
      counter[level]++;
   };
   return res;
};
console.log(flattenWithoutRecursion(arr));

出力

そして、コンソールの出力は-

になります
[
   1, 4, 5, 5, 6, 6,
   19, 5, 5, 5, 7, 6,
   6, 8, 8, 6
]

  1. JavaScriptの配列findIndex()関数

    JavaScriptのfindIndex()関数は、配列内の特定の条件を満たす最初の要素値のインデックスを返します。 以下は、配列find()関数のコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <titl

  2. JavaScriptでsome()関数を配列します

    JavaScript配列some()関数は、配列の要素の一部が特定のテストに合格するかどうかをチェックします。テストは基本的に、配列の各要素に対して実行される関数です。 以下は、配列some()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-sc