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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL 8.0.12 の詳細なインストールおよびアンインストール チュートリアル
>>: Linux (Ubuntu) ユーザーがログイン時に N 回連続して間違ったパスワードを入力すると、システムは自動的に X 分間ロックされます。
今日、私は公開用の動的なウィンドウ スタイルを設計しましたが、マウスで入力をクリックしたときにブラウ...
画像の周囲にテキストを折り返すとは何ですか?これは次の図の効果です。 エフェクトのCSSコードはここ...
負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...
この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...
目次序文Zookeeper サービスのオープンを検出情報を入手する接続テスト接続先修理計画参照する序...
序文:私の知る限り、現在 CSS で制御できるのは、タグをホバーしたときにそのタグの下の兄弟タグとサ...
では、早速リソースについて見ていきましょう。 123WORDPRESS.COM ダウンロードSQLy...
繰り返し: サイト全体で特定のページ デザイン スタイルを繰り返します。繰り返し要素としては、特定の...
デフォルトでは、Flash は常にページのトップレベルに表示されます。つまり、ページに DHTML ...
私たちは視覚の世界に住んでおり、多くの視覚効果に囲まれています。コンピューターの前にいても、屋外にい...
ナビゲーションバーの作成:技術要件: CS HTMLタグ達成目的:ナビゲーションバーメニューの作成コ...
目次1. 暗黙的な変換二重等号での変換ブール型変換「+」と「-」 2. 強制型変換' ...
実際のプロジェクト開発プロセスでは、ページがサーバーにアップロードされます。サーバーへの負荷を軽減し...
MySQL Community Server 5.7.18 の配布パッケージには .ini ファイル...
以前、CSS を使用してテーブルの border + bordercolordark + borde...