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

推薦する

divは、自動入力スタイルをブロックする入力ボックスとして入力を使用せずにコンテンツを入力できます。

今日、私は公開用の動的なウィンドウ スタイルを設計しましたが、マウスで入力をクリックしたときにブラウ...

CSSはフロートをシミュレートして、画像の左右を囲む中央テキストの効果を実現します。

画像の周囲にテキストを折り返すとは何ですか?これは次の図の効果です。 エフェクトのCSSコードはここ...

Nginx ロードバランシングとは何か、そしてそれをどのように設定するか

負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...

シンプルなカルーセルの最も完全なコード分析を実装するJavaScript(ES6オブジェクト指向)

この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...

Zookeeper 不正アクセス テストの問題

目次序文Zookeeper サービスのオープンを検出情報を入手する接続テスト接続先修理計画参照する序...

CSS を使用してマウスをホバーすることで他のタグのスタイルを変更するサンプルコード

序文:私の知る限り、現在 CSS で制御できるのは、タグをホバーしたときにそのタグの下の兄弟タグとサ...

MySQLデスクトップツールSQLyogのリソースとアクティベーション方法は、白黒のコマンドラインに別れを告げます

では、早速リソースについて見ていきましょう。 123WORDPRESS.COM ダウンロードSQLy...

Web デザインのヒント: ページ レイアウトの簡単なルール

繰り返し: サイト全体で特定のページ デザイン スタイルを繰り返します。繰り返し要素としては、特定の...

Web デザインでフラッシュ オーバーレイ ポップアップ レイヤーの z-index プロパティを設定しても機能しない

デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...

燃える炎効果の英語フォント16種類をシェアする

私たちは視覚の世界に住んでおり、多くの視覚効果に囲まれています。コンピューターの前にいても、屋外にい...

トップナビゲーションバーメニューを作成するためのHTML+CSS

ナビゲーションバーの作成:技術要件: CS HTMLタグ達成目的:ナビゲーションバーメニューの作成コ...

JavaScript における型の必須および暗黙的な変換の詳細な説明

目次1. 暗黙的な変換二重等号での変換ブール型変換「+」と「-」 2. 強制型変換' ...

ブラウザのCSS、JavaScript、背景画像のキャッシュをクリアする簡単な方法

実際のプロジェクト開発プロセスでは、ページがサーバーにアップロードされます。サーバーへの負荷を軽減し...

tdが空の場合に境界線を表示する方法

以前、CSS を使用してテーブルの border + bordercolordark + borde...