JSはマップを使用してdouble配列を統合します

JSはマップを使用してdouble配列を統合します

序文

最近、会社のビジネスニーズにより、会社の段階的なビジネスに関連するデータの変化を表示するための ECharts チャートを作成しました。サーバーはデータを照会し、データを表示するためにフロントエンドに返す必要があります。しかし、返されたデータはフロントエンドのEChartsに表示するのに不便なので、データ統合が必要です。しかし、経験不足のため、会社の上司に助けを求めることしかできませんでした。上司の助けを借りて、データ統合を完了し、これまでにないマージ方法を学び、今日皆さんと共有します。

データのシミュレーション

次の図は、結合する 2 つの配列を示しています。

結合されたデータ

マージされたデータは、double 配列内のオブジェクトを、time のみをキーとしてマージする必要があります。オブジェクトに値が存在する場合は、それが表示されます。存在しない場合は、オブジェクトが持っていないキーが初期化され、初期値は 0 になります (式が明確でない場合は、最終的なマージされたデータが以下に表示されます)

合併のアイデア

このマージでは、js mapp テクノロジが使用されます。時間が唯一のキーであるため、配列 1 をトラバースして時間をキーとしてマップを初期化し、次に配列 2 をトラバースしてデータを補完し、処理されたマップを配列に変換する必要があります。

コードの表示と分析

最初のステップ

まずシミュレーションデータを宣言し、マップを格納する空のオブジェクトを作成します。

      //シミュレートされたデータ arr1
      testArrOne = [ とします。
        { 日付: "2021-8-11", テスト番号: 1 },
        { 日付: "2021-8-12", テスト番号: 2 },
        { 日付: "2021-8-13", テスト番号: 3 },
      ];
      //シミュレートされたデータ arr2
      testArrTwo = [ とします。
        { 日付: "2021-8-12", testNumTwo: 2 },
        { 日付: "2021-8-14", testNumTwo: 4 },
        { 日付: "2021-8-15", testNumTwo: 5 },
      ];
      //マージメソッド let testMap = {}; //まず空のオブジェクトをマップとして宣言する

ステップ2

配列を走査してマップを初期化する

   //最初の配列を走査する testArrOne.forEach((item) => {
        testMap[item.date] = {
          date: item.date, //初期化時刻 testNumOne: item.testNumOne || 0, //初期化テストデータ 1 testNumTwo: 0, //初期化テストデータ 2 };
      });
  

すると、時間を唯一のキーとするマップができます。次のデータを出力します。

ステップ3

配列2を走査して、関連する割り当てと初期化操作を実行します。

    // 2番目の配列を走査する testArrTwo.forEach((item) => {
       //配列に時刻を含むマップ オブジェクトが含まれている場合は、それをコピーします。新しい時刻が見つかった場合は、初期化して空のオブジェクトを割り当てます。testMap[item.date] = testMap[item.date] || {}; 
       //割り当て timetestMap[item.date].date = item.date;
        //テスト データに 1 を割り当てます。そうでない場合は、初期化します。testMap[item.date].testNumOne = testMap[item.date].testNumOne || 0;
        //補助テストデータ twotestMap[item.date].testNumTwo = item.testNumTwo;
      });

次のようにマップを印刷して統合オブジェクトを取得します。

ステップ4

map を arr に変換すれば完了です。

 this.listMapUtils.map2List(テストマップ);

以下は、mapとarr間の変換をカプセル化したコードです。

      リストマップユーティリティ: {
      //マップメソッドにarrする list2Map: function(list, key) {
          map = {} とします。
          if (リスト && Array.isArray(リスト) && リスト.length > 0) {
            リスト.forEach((項目) => {
              アイテム[キー] ? (map[アイテム[キー]] = アイテム) : "";
            });
          }
          マップを返します。
        },
        //arrメソッドにマップする map2List: function(map) {
          リストを [] にします。
          if (map && typeof map === "オブジェクト") {
            for (let key in map) {
              リストをプッシュします(map[キー])。
            }
          }
          リストを返します。
        },
      },


完全なコード

map と arr の変換方法を示すのに便利なので、データに記載しました。学生はこのように書いてはいけません。フロントエンドとしては、やはりモジュール化の考え方が必要です。

<テンプレート>
  <div></div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前:「アプリ」、
  データ() {
    戻る {
      リストマップユーティリティ: {
        list2Map: 関数(リスト、キー) {
          map = {} とします。
          if (リスト && Array.isArray(リスト) && リスト.length > 0) {
            リスト.forEach((項目) => {
              アイテム[キー] ? (map[アイテム[キー]] = アイテム) : "";
            });
          }
          マップを返します。
        },
        map2List: 関数(map) {
          リストを [] にします。
          if (map && typeof map === "オブジェクト") {
            for (let key in map) {
              リストをプッシュします(map[キー])。
            }
          }
          リストを返します。
        },
      },
    };
  },
  作成された() {
    この.mergeArr();
  },
  メソッド: {
    マージArr() {
      //シミュレートされたデータ arr1
      testArrOne = [ とします。
        { 日付: "2021-8-11", テスト番号: 1 },
        { 日付: "2021-8-12", テスト番号: 2 },
        { 日付: "2021-8-13", テスト番号: 3 },
      ];
      //シミュレートされたデータ arr2
      testArrTwo = [ とします。
        { 日付: "2021-8-12", testNumTwo: 2 },
        { 日付: "2021-8-14", testNumTwo: 4 },
        { 日付: "2021-8-15", testNumTwo: 5 },
      ];

      //マージメソッド let testMap = {}; //まず空のオブジェクトをマップとして宣言する

      //最初の配列を走査する testArrOne.forEach((item) => {
        testMap[item.date] = {
          日付: アイテム.日付、
          テスト番号: 項目.テスト番号 || 0,
          テスト番号2: 0,
        };
      });

      testArrTwo.forEach((アイテム) => {
        testMap[item.date] = testMap[item.date] || {}; //オブジェクトを初期化します testMap[item.date].date = item.date;
        testMap[item.date].testNumOne = testMap[item.date].testNumOne || 0;
        testMap[item.date].testNumTwo = item.testNumTwo;
      });
      
      //arrにマップする
      this.listMapUtils.map2List(テストマップ);
      //最終結果を取得します console.log(this.listMapUtils.map2List(testMap));
    },
  },
};
</スクリプト>

<スタイル></スタイル>

要約する

これで、マップを使用してダブル配列を統合する JS に関するこの記事は終了です。関連する JS 統合ダブル配列コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援してください。

以下もご興味があるかもしれません:
  • コーディングスキルを向上させるためのJavaScriptのヒント
  • JavaScriptに関するヒントをいくつか共有します
  • 9 つの JavaScript 日常開発のヒント
  • JavaScript コーディングのヒントの共有
  • JavaScript フロントエンド開発における数値計算のヒント
  • 5分でJavaScriptの9つのヒントをマスターしましょう
  • JS 開発効率を上げる4つの超実践的なヒント

<<:  MySQL 8.0.18 のさまざまなバージョンのインストールとインストール中に発生した問題 (要点の要約)

>>:  DockerでJenkinsをインストールし、初期プラグインのインストール失敗の問題を解決する

推薦する

Nginx メモリプールのソースコード分析

目次メモリプールの概要1. nginxデータ構造2. nginxはOSからスペースngx_creat...

MySQL トランザクション分離レベルとロックメカニズムの問題に関する深い理解

概要データベースは通常、複数のトランザクションを同時に実行します。複数のトランザクションが、同じデー...

Vue フィルターの使用とタイムスタンプ変換の問題

目次1. 概念をすぐに認識する: 2. ローカルフィルター: 3. グローバルフィルター: 4. 拡...

ネイティブ JS カプセル化 vue タブ切り替え効果

この記事の例では、ネイティブJSカプセル化vueタブ切り替えの具体的なコードを参考までに共有していま...

CSSの固定位置属性の詳細な説明

モバイル アプリを開発する場合、Web サイトが特定の高さまでスクロールしたときにコンテンツの一部を...

Webデザインチュートリアル(7):Webデザインの効率化

<br />前の記事:Webデザインチュートリアル(6):デザインへの情熱を持ち続けまし...

MySQL データベースの必須条件クエリ ステートメント

目次1. 基本的な文法2. 条件式によるフィルタリング3. 論理式によるフィルタリング4. あいまい...

MySQL テーブルを削除するときに外部キー制約を無視するシンプルな実装

テーブルを削除することはあまり一般的ではありませんが、特に外部キーの関連付けがあるテーブルの場合は、...

JS の 6 つの継承方法とその長所と短所

目次序文プロトタイプチェーン継承コンストラクタの継承組み合わせ継承(プロトタイプチェーン継承とコンス...

Prometheus を使用して、MySQL の自動増分主キーの残りの使用可能パーセンテージをカウントします。

最近、本番環境のデータベースがログデータを狂ったように書き込み、主キー値のオーバーフローを引き起こし...

vueの実践的な応用におけるvuexの永続性の詳細な説明

目次vuex 永続性要約するvuex 永続性vuex: ブラウザを更新すると、vuexの状態は初期状...

SpringBoot を MySQL に接続してデータを取得し、バックエンド インターフェースに書き込む方法

目次1. 新しいプロジェクトを作成する2. 依存関係を追加する3. SpringコンテナにDrive...

MySQLオンラインデッドロック分析練習

序文MySQL を学習する際に、MySQL のロック メカニズムについて簡単に理解したことがあると思...

1 つの記事で MySQL のプリコンパイルを理解する

1. プリコンパイルの利点私たちは皆、プリコンパイル機能を備えた JDBC の PreparedSt...

HTML+CSS+JavaScript でガールフレンド版のスクラッチ カードを作成します (一度見ればすぐに覚えられます)

誰もがスクラッチ チケットで遊んだことがあると思います。子供の頃、ポケットにお金が入るとすぐに友達に...