JavaScript でフラット配列から階層ツリー構造を効率的に構築する方法
JavaScript でフラット配列から階層ツリー構造を構築する
はじめに
JavaScript では、階層データを操作します。ツリー構造やナビゲーション メニューの作成など、さまざまなアプリケーションに不可欠です。データがフラット配列に格納されている場合、データの操作と視覚化を容易にするためにデータを階層構造に変換する必要があります。この記事では、JavaScript でフラット配列からツリー配列を構築する効果的な方法を説明します。
問題
次のプロパティを持つオブジェクトで構成される複雑な JSON ファイルがあるとします。 :
- id: 一意の識別子
- parentId: 親の IDノード (ルート ノードの場合は 0)
- レベル: ツリー内のノードの深さ
このタスクは、フラットな JSON 構造を、ネストされたオブジェクトを表す階層ツリー構造に変換することです。親子関係。
ソリューション
ソリューションは次のことを活用します。階層ツリー構造を効率的に構築するためのマップ検索アプローチ。アルゴリズムには 2 つのステップが含まれます:
-
オブジェクトにインデックスを付けるマップの作成:
- フラット配列を反復処理し、次のマップを作成します。キーは id プロパティで、値は対応する配列です。
-
ツリー構造を構築します:
-
フラット配列を再度反復処理します:
- 各オブジェクトについて、マップからその親のインデックスを取得します。 parentId.
- 親が存在する (ルートではない) 場合、現在のオブジェクトを子としてその親に追加します。
- 親が存在しない場合、それはルート ノードであるため追加する必要があります。ルートノードへarray.
-
例
次のフラットな JSON 配列を考えてみましょう:
const entries = [{ "id": "12", "parentId": "0", "text": "Man", "level": "1", "children": null }, { "id": "6", "parentId": "12", "text": "Boy", "level": "2", "children": null }, { "id": "7", "parentId": "12", "text": "Other", "level": "2", "children": null }, { "id": "9", "parentId": "0", "text": "Woman", "level": "1", "children": null }, { "id": "11", "parentId": "9", "text": "Girl", "level": "2", "children": null }];
上記のアルゴリズムをこのフラット配列に適用すると、次の階層ツリーが出力されます構造:
const result = [ { "id": "12", "parentId": "0", "text": "Man", "level": "1", "children": [ { "id": "6", "parentId": "12", "text": "Boy", "level": "2", "children": null }, { "id": "7", "parentId": "12", "text": "Other", "level": "2", "children": null } ] }, { "id": "9", "parentId": "0", "text": "Woman", "level": "1", "children": { "id": "11", "parentId": "9", "text": "Girl", "level": "2", "children": null } } ];
結論
提示されたアルゴリズムは、階層データのフラット配列を JavaScript で構造化ツリー配列に変換する効率的な方法を提供します。このアプローチでは、マップ ルックアップを利用してプロセスを最適化し、複数のルート ノードをサポートします。これは、さらなる操作や視覚化のために複雑なデータからツリー構造を作成する必要がある状況に最適です。
以上がJavaScript でフラット配列から階層ツリー構造を効率的に構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

この記事では、Javaのコレクションフレームワークの効果的な使用について説明します。 データ構造、パフォーマンスのニーズ、スレッドの安全性に基づいて、適切なコレクション(リスト、セット、マップ、キュー)の選択を強調しています。 コレクションの使用を効率的に最適化します

エントリーレベルのタイプスクリプトチュートリアルをマスターしたら、TypeScriptをサポートするIDEで独自のコードを作成し、JavaScriptにコンパイルできるはずです。このチュートリアルは、TypeScriptのさまざまなデータ型に飛び込みます。 JavaScriptには、NULL、未定義、ブール値、数字、文字列、シンボル(ES6によって導入)とオブジェクトの7つのデータ型があります。 TypeScriptはこれに基づいてより多くのタイプを定義し、このチュートリアルではすべてを詳細に説明します。 ヌルデータ型 JavaScriptのように、Typescriptのnull

このチュートリアルでは、chart.jsを使用してパイ、リング、およびバブルチャートを作成する方法について説明します。以前は、4つのチャートタイプのchart.js:ラインチャートとバーチャート(チュートリアル2)、およびレーダーチャートと極地域チャート(チュートリアル3)を学びました。 パイとリングチャートを作成します パイチャートとリングチャートは、さまざまな部分に分かれている全体の割合を示すのに理想的です。たとえば、パイチャートを使用して、サファリの男性ライオン、女性ライオン、若いライオンの割合、または異なる候補者が選挙で受け取る票の割合を示すことができます。 パイチャートは、単一のパラメーターまたはデータセットの比較にのみ適しています。パイチャートのファンの角度はデータポイントの数値サイズに依存するため、パイチャートは値のあるエンティティをゼロ値で描画できないことに注意してください。これは、割合がゼロのエンティティを意味します
