バックグラウンドで10,000個のデータが失われたどれだけ計画を立てても、逃れられませんでした。バックエンドは本当に一度に何万ものデータをフロントエンドに投げ込んでいました。まあ、少なくともまだ10万には達していません。以下に示すように、背景は次の構造を返します。 定数flatArr = [ { id: '001'、名前: 'ノード 1' }, { id: '0011'、親ID: '001'、名前: 'ノード1-1' }, { id: '00111'、親ID: '0011'、名前: 'ノード 1-1-1' }, { id: '002'、名前: 'ノード 2' }, ] ご覧のとおり、これは実際にはフラットな配列です。私たちの要件は、次のようなツリー構造を受け取る Element-ui のカスケード セレクターでこのようなデータをレンダリングすることです。 オプション = [ { 値: 'zhinan'、 ラベル: 'ガイド'、 子供たち: [ { 値: 'shejiyuanze'、 ラベル: 「デザイン原則」、 子供たち: [ { 値: 'yizhi'、ラベル: 'consistent' }, { 値: 'fankui'、ラベル: 'フィードバック'} ]、 } ] } ] ああ、これはフラット配列をツリー構造に変換する必要がある! 再帰法完成しました。コードは簡潔で、アイデアは明確です。実行するとどうなるでしょうか?ページが停止しています。console.time() によると、必要なツリー構造を計算するのに約 18 秒かかりました。 非再帰的方法ここでは、オブジェクトが参照を保存する機能を巧みに適用しています。毎回、現在のノードの ID がキーとして使用され、対応するノードの参照情報が保存されます。配列をトラバースすると、objMap の子情報が毎回更新されます。このようにして、すべてのノードとその子ノードが objMap に保持されます。最も重要なのは、配列を 1 回トラバースするだけでよく、時間の計算量は O(n) であることです。この方法を使用すると、計算時間はわずか 60 ミリ秒です。 要約する
比較表を見てみましょう: データ量が増えるにつれて時間の計算量も増加するという上記の傾向から、データがどんどん大きくなると、再帰アルゴリズムによって消費される時間は非再帰アルゴリズムによって消費される時間よりもはるかに長くなることがわかります。したがって、データ量が少ない場合は再帰アルゴリズムを使用すると一定の利点がありますが、データがある程度大きくなると、再帰アプローチの欠点がますます明らかになり、非再帰アルゴリズムを使用する方がはるかに高速になります。 最後に、この比較を通じて、アルゴリズムの重要性をはっきりと感じることができると言わなければなりません。実装方法が異なると大きな違いが生じる可能性があり、すべての開発者が注目する価値があります。 JavaScript のフラット配列をツリー構造に変換する実装例については、これで終わりです。JavaScript のフラット配列をツリー構造に変換することに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL SQL ステートメントが遅い場合の一般的な原因と解決策
>>: VMware Workstation での VMware vSphere のセットアップ (グラフィック チュートリアル)
今日、クライアントが広告を掲載したいのですが、提供された素材は Flash です。私たちはあまり気に...
vue3テレポート瞬間移動機能の使用は参考用です。具体的な内容は次のとおりです。テレポートは通常、瞬...
設定ファイルに直接 サーバー{ listen 80 default; # IPへの直接アクセスを禁止...
Dockerイメージ内のファイルを表示する方法1. すでに実行中の場合すでに実行中のイメージについて...
すべてのプラットフォーム用の MySQL ダウンロードは、MySQL ダウンロードから入手できます。...
このデータベース クエリ ステートメントは、インターネット上の 50 個のデータベース クエリ練習問...
Redis は、ANSI C で記述されたオープンソースの NoSQL データベースであり、ネットワ...
目次(I) Workbenchを使用してデータベースを操作する①データベースを作成する② データベー...
準備1. 仮想マシンを起動する2. gitツールルートアカウントでログインルートアカウントを使用して...
1. はじめにMySQL ロックは、その範囲に応じて、グローバル ロック、テーブル ロック、行ロック...
目次概要1. 親コンポーネントが子コンポーネントに値を渡す2. 子コンポーネントが親コンポーネントに...
Nginx 502 Bad Gateway エラーに何度か遭遇しました。ここでメモしておこうと思いま...
目次1. まず最初のリンクを取得する2. ブラウザでこのリンクを開いてください3. アドレスを開くと...
目次1. はじめに2. コードの実装2.1 目的分析2.2 実装プロセス2.2.1 エントリーコード...
<!--[lte IE 6の場合]> <![endif]--> IE6以下で...