配列をフラット化する 5 つの JavaScript の方法

配列をフラット化する 5 つの JavaScript の方法

1. 配列の平坦化の概念

配列の平坦化は、多次元配列を 1 次元配列に変換するプロセスです。

[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]

2. 実装

1. 減らす

配列内の各項目を走査します。値が配列の場合は再帰的に走査し、それ以外の場合はconcat

関数flatten(arr){  
    戻り値 arr.reduce((結果, 項目)=> {
        結果を返します。concat(Array.isArray(item) ? flatten(item) : item);
    }, []);
}

reduce 、関数を累算器として受け取り、配列内の各値 (左から右へ) を単一の値に減らす Array のメソッドです。
reduceは2つのパラメータ、コールバック関数、 totalに渡される初期値が含まれます。

// 配列内の値の合計を求めます: 
arr.reduce((total, item)=> { // total は前の計算結果、item は配列内の各項目の値です。 return total + item;
}, 0);

2. toString と split

配列のtoStringメソッドを呼び出して配列を文字列に変換し、splitを使用して配列に戻します。

関数flatten(arr){
    arr.toString().split(',').map(function(item) { を返します。
        Number(item)を返します。
    })
}

分割後に形成される配列内の各項目は文字列であるため、配列を走査して各項目を数値型に変換するには map メソッドが必要です。

3. 結合と分割

上記のtoStringと同様に、 join配列を文字列に変換することもできます。

関数flatten(arr){
    戻り値 arr.join(',').split(',').map(function(item) {
        parseInt(item) を返します。
    })
}

4. 再帰

各項目を再帰的に走査し、配列の場合は走査を続行し、そうでない場合はconcat

関数flatten(arr){
    var res = [];
    arr.map(アイテム => {
        if(Array.isArray(item)) {
            res = res.concat(flatten(item));
        } それ以外 {
            res.push(アイテム);
        }
    });
    res を返します。
}

5. スプレッド演算子

es6のスプレッド演算子は2次元配列を1次元配列に変換できる

[].concat(...[1, 2, 3, [4, 5]]); // [1, 2, 3, 4, 5]

この結果に基づいて、トラバーサルを行うことができます。arr arr配列が含まれている場合は、配列がなくなるまで拡張演算子を 1 回使用します。

関数flatten(arr){
    while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    arr を返します。
}

要約:

これで、配列をフラット化する 5 つのJavaScript方法についての記事は終了です。JavaScript で配列をフラットJavaScriptする方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS配列重複排除の詳細
  • JavaScript配列の重複排除のいくつかの方法についての詳細な説明
  • JavaScript 配列重複排除問題の詳細な研究
  • JavaScript 配列重複排除ソリューション
  • jsは配列の平坦化を実装します
  • JavaScript データのフラット化の詳細な説明
  • JavaScript インタビュー: 配列の平坦化メソッドを実装する方法
  • JavaScript 配列の重複排除とフラット化関数の紹介

<<:  docker-compose が遅すぎる場合の解決策の詳細な説明

>>:  MySQL の 3 つの浮動小数点型 (float、double、decimal) の違いと概要について簡単に説明します。

推薦する

JavaScript の寄生的構成継承についての簡単な説明

コンポジション継承組み合わせ継承は、疑似古典的継承とも呼ばれます。これは、昨日説明したプロトタイプ ...

elementui の el-popover スタイルの変更が有効にならない問題の解決策

element-uiを使用する場合、el-popoverというよく使われるコンポーネントがありますが...

MySQL GROUP_CONCAT 制限の解決

効果: GROUP_CONCAT関数は、フィールド値を文字列に連結することができます。デフォルトの区...

Jenkins初心者のためのDockerデプロイメントチュートリアルの詳細な説明

この記事では、docker 経由で Jenkins+Maven+SVN+Tomcat をデプロイし、...

CentOS7 インストール Zabbix 4.0 チュートリアル (イラストとテキスト)

SeLinuxを無効にするsetenforce 0永久に閉店: vi /etc/selinux/c...

Ubuntu 16.04 64ビット版を3つのステップで32ビットプログラムと互換性を持たせる

ステップ1: システムのアーキテクチャを確認する dpkg --print-architecture...

Ubuntu Server 16.04 MySQL 8.0 のインストールと設定のグラフィックチュートリアル

Ubuntu Server 16.04 MySQL 8.0 のインストールと設定のグラフィックチュー...

MySQL の起動オプションとシステム変数の例の詳細な説明

目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...

コード分​​析を実現するためのFastDFSとNginxの統合

FastDFSとNginxの統合:トラッカーは、負荷分散と高可用性のために Nginx と組み合わせ...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

コマンドを使用してMySQLデータベース(de1)を作成する方法

1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

CentOS 7 で MySQL 接続数が 214 に制限される問題の解決方法

問題を見つける最近、プロジェクトで問題が発生しました。接続が多すぎるため、「接続が多すぎます」という...

MYSQL の binlog 最適化に関する考察の要約

質問質問 1: トランザクションをコミットするときに REDO ログをフラッシュすることによって発生...

テーブル切り替えのための JavaScript プラグインのカプセル化

この記事では、テーブル切り替えプラグインを実装するためのJavaScriptのカプセル化コードを参考...

Vue.js ディレクティブのカスタム命令の詳細な説明

デモコマンドをカスタマイズするVue カスタム ディレクティブの構文は次のとおりです。 Vue.di...