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 分間ロックされます。

推薦する

読めばわかるVueの8つのヒント

1. v-forでは常に:keyを使用するデータを操作する必要があるときにプログラムを一定かつ予測可...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

ウェブページのメモリとCPU使用量を削減する方法

<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...

MySQL トランザクション分離レベルの詳細

serializableシリアル化(問題なし)トランザクションは順次実行する必要があります。前のトラ...

Mysql systemctl start mysqld によって報告されるエラーの解決策

エラーメッセージ:制御プロセスがエラー コードで終了したため、mysqld.service のジョブ...

Ubuntu での Subversion (SVN) の詳細なインストールと設定

ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...

MySQL最適化ソリューション: スロークエリログを有効にする

目次序文スロークエリログの設定テスト付録: ログ解析ツール mysqldumpslow要約する序文こ...

mysql サブクエリと結合テーブルの詳細

目次1. サブクエリとは何ですか? 2. 自己結合3. 自然な結合4. 外部接続1. サブクエリとは...

jsのイベントオブジェクトを深く理解しましょう

JS でよく使用されるイベントは次の通りです。ページイベント: load;フォーカス イベント: フ...

CentOS 6 または CentOS 7 でディスク領域をクリアする方法

以下は、CentOS 6 または CentOS 7 サーバーのディスク領域をクリアするための簡単なコ...

MySQL 文字セットの表示と変更のチュートリアル

1. 文字セットを確認する1. MYSQLデータベースサーバーとデータベースの文字セットを確認する方...

VUE レンダリング機能の使い方と詳細な説明

目次序文レンダリングの役割レンダリング機能の説明レンダリングとテンプレートの違いレンダリング例要約す...

dockerコンテナにviコマンドをインストールする簡単な操作

docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...

mysql 5.7.20 win64 のインストールと設定方法

mysql-5.7.20-winx64.zipインストール手順のないインストール パッケージ: ht...

Linux コンパイル最適化で習得しなければならないいくつかの姿勢のまとめ

01. コンパイルオプションとカーネルコンパイルLinux カーネル (英語: linux kern...