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

推薦する

Postman 自動インターフェーステストの実践

目次背景説明GETリクエストの作成事前リクエストスクリプトで署名を作成するスクリプトは環境変数に書き...

JS 1次元配列を3次元配列に変換する例

今日、CSDN の Q&A セクションで友人が質問をしているのを見ました。彼は 1 次元配列...

MacBook 向け Python 3.7 インストール チュートリアル

MacBookにpython3.7.0をインストールする詳細な手順は、参考までに記録されています。具...

素晴らしいCSS属性MASKの詳しい説明

この記事では、CSS の非常に興味深い属性マスクを紹介します。名前が示すように、マスクはマスクと翻訳...

Win10にmysql8.0.15 winx64をインストールしてサーバーに接続する際に問題が発生しました

1. mysql-8.0.15をダウンロード、インストール、設定する1. 公式サイト (https:...

DIVのぼかし機能を実装する方法

マウスを動かしたときにDIVが消えるように手ぶれ補正を使用するdiv タグ自体は onblur イベ...

Navicat の MySQL へのリモート接続が遅い理由の詳細な説明

最終的な解決策は最後の写真にありますリモート データベース ( Linux システム) に接続したと...

Linuxでサーバーのハードウェア情報を表示する方法

みなさんこんにちは。今日は12連休ですが、何かお買い物はしましたか?今日は「Linux View S...

Linux dateコマンドの知識ポイントのまとめ

使用法: date [オプション]... [+フォーマット]または: date [-u|--utc|...

CentOS8 yum/dnfで国内ソースを設定する方法

CentOS 8 ではソフトウェア パッケージのインストール プログラムが変更され、yum 構成方法...

純粋な CSS で「テキストオーバーフローの切り捨てと省略」を実装するいくつかの方法

私たちの日常的な開発作業では、テキストのオーバーフロー、切り捨て、省略は、考慮する必要がある非常に一...

Vueはキャンバスの手書き入力を使用して中国語を認識します

効果画像: 序文:最近、屋外の大画面プロジェクトに取り組んでいました。システムの入力方法は使いにくか...

Linux 上での MySQL データベースのリモート展開の詳細な手順

LinuxリモートMySQLデータベースの展開、参考までに、具体的な内容は次のとおりです。 1.0 ...

JavaScript の遅延読み込み属性パターンを理解する

従来、開発者はインスタンスで必要になる可能性のあるデータに対して JavaScript クラス内にプ...