JavaScript配列をツリー構造に変換する方法

JavaScript配列をツリー構造に変換する方法

1. 需要

バックエンドは、フロントエンドがツリー構造(重複データなし)に変換するためのデータを提供します。では、早速、どのような配列データが与えられ、どのようなツリー構造に変換されるのかを見てみましょう。

サーバーから送信された配列

定数arr = [
      [
        {"部門ID":"D019",
        "deptName":"営業部"},
        {"部門ID":"D019101",
        "deptName":"華北営業センター"}
      ],[
        {"部門ID":"D083",
        "deptName":"音楽学部"}
      ],[
        {"部門ID":"D027",
        "deptName":"杭州研究所"},
        {"部門ID":"D027048",
        "deptName":"技術エンジニアリング部門"},
        {"部門ID":"D027048002",
        "deptName":"プロジェクト管理センター"}
      ],[
        {"部門ID":"D027",
        "deptName":"杭州研究所"},
        {"部門ID":"D027048",
        "deptName":"技術エンジニアリング部門"}
      ],[
        {"部門ID":"D027",
        "deptName":"杭州研究所"},
        {"部門ID":"D027048",
        "deptName":"技術エンジニアリング部門"}
      ]
    ]

最終的に変換

定数arr = [
    {
      部門ID: 'D019',
      deptName: '営業部',
      子供たち: [{
        部門ID: 'D019101',
        部門名: '北中国営業センター',
        子供たち: []、
      }]
    },
    {
      部門ID: 'D083',
      deptName: '音楽学部',
      子供たち: []
    },
    {
      部門ID: 'D027',
      部門名: '杭州研究所'、
      子供たち: [{
        部門ID: 'D027048',
        deptName: '技術エンジニアリング部門',
        子供たち: [{
          部門ID: 'D027048002',
          deptName: 'プロジェクト管理センター',
          子供たち: []
        }]
      }]
    },
  ]

2. コード(reactHooksで開発)

定数[treeData、setTreeData] = useState([]);
  console.log(treeData); //treeData は必要な最終的なツリー構造です (ローカル ブラウザーに表示される内容は正しいです)
  
  使用効果(() => {
    : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
    const arr = JSON.parse(str).flat(); //フラット化 let newArr = [];
    noRepeat(arr).length && noRepeat(arr).forEach(it => {
      子要素を追加します。
    });
  }, [])

  const noRepeat = (arr) => { //重複を削除 let newobj = {}; 
    arr.reduce((preVal, curVal) => { を返す
    newobj[curVal.deptId] ? '' : newobj[curVal.deptId] = preVal.push(curVal); 
      戻り値: 
    }, []);
  }

  const appendChild = (item, newArr) => {
    if(!newArr.find(it => item.deptId.indexOf(it.deptId) > -1)) { //すべての第1レベルの部門 newArr.push({
        部門ID: アイテム.部門ID、
        部門名: アイテム.部門名、
        子供たち: []、
      });
      新しいツリーデータを設定します。
    }それ以外 {
      他の子を追加します(項目、新しいArr);
    }
  }

  const appendOtherChild = (item, newArr) => {
    新しいArr.map(it => {
      if(item.deptId.indexOf(it.deptId) > -1 && item.deptId.length === it.deptId.length+3) {
        it.children.push({
          部門ID: アイテム.部門ID、
          部門名: アイテム.部門名、
          子供たち: []、
        })
      }それ以外 {
        他の子を追加します(item, it.children);
      }
    });
    新しいツリーデータを設定します。
  }

要約する

これらのデータはあなたのデータと異なるかもしれませんが、ロジックはおそらくかなり近いでしょう。これらの数十行のコードをよく見てください。

JavaScript 配列をツリー構造に変換する方法についてはこれで終わりです。JavaScript 配列をツリー構造に変換する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JSはreduce()メソッドを使用してツリー構造データを処理します
  • JavaScript でツリー構造を構築するための効率的なアルゴリズムについての簡単な説明
  • フラットデータをツリー構造に変換するための JavaScript の効率的なアルゴリズム
  • 再帰を使用して JavaScript で単純なツリー構造の例を書く方法
  • JSON 複合データ処理: Json ツリー構造データを Java オブジェクトに変換し、データベースに保存します。

<<:  MySQL 8.0.12 の詳細なインストールおよびアンインストール チュートリアル

>>:  Linux (Ubuntu) ユーザーがログイン時に N 回連続して間違ったパスワードを入力すると、システムは自動的に X 分間ロックされます。

推薦する

JavaScript の instanceof メソッドの手動実装

1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...

Dockerカスタムネットワークの詳細な紹介

目次Dockerカスタムネットワーク1. カスタムネットワークの紹介2. カスタムネットワークを作成...

IE環境では、divの高さはフォントの高さよりも大きくなければならないと規定されています。

コードをコピーコードは次のとおりです。 <div class="content&qu...

html リンク タグ タイトル属性 改行 マウス ホバー プロンプト コンテンツ 改行効果

オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...

MySQLのトランザクション特性とレベル原則の分析

1. トランザクションとは何ですか?データベース トランザクション (略称: トランザクション) は...

SSL で Nginx リバース プロキシを構成する簡単な手順

序文リバース プロキシは、Web 経由で行われたリクエスト (http と https の両方) を...

JS での filter() 配列フィルターの使用

目次1. はじめに2. 方法の紹介3. 使用例要約する1. はじめに配列フィルターは、フロントエンド...

Vue echarts は棒グラフの動的な表示を実現します

この記事では、棒グラフの動的な表示を実現するためのvue echartsの具体的なコードを参考までに...

Vue プロジェクトに ECharts を導入する

目次1. インストール2. はじめに3. 使用4. 必要に応じてEChartsチャートとコンポーネン...

MySQLの指定順序ソートクエリについての簡単な説明

最近、空港や駅でフライト情報を表示するものと似た大型スクリーンディスプレイのプロジェクトに取り組んで...

MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます

目次1. 遭遇した問題2. 問題を分析する3. 本当の問題4. 解決策5. ソリューション効果1. ...

Vue のスロットリング関数使用時の落とし穴ガイド

序文一般的なビジネス シナリオでは、検索ボックスへの入力が完了した後、検索データを取得するために関連...

LinuxベースのSelenium環境を構成し、操作を実装する

1. Linux で Selenium を使用する1. Chromeをインストールする次のコマンドを...

Vue+Elementでページング効果を実現

この記事の例では、ページング効果を実現するためのvue+Elementの具体的なコードを参考までに共...

nginx で同時接続リクエストの数を制限する方法

導入同時接続数を制限するモジュールは http_limit_conn_module です。アドレス:...