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 分間ロックされます。
1. v-forでは常に:keyを使用するデータを操作する必要があるときにプログラムを一定かつ予測可...
目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...
<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...
serializableシリアル化(問題なし)トランザクションは順次実行する必要があります。前のトラ...
エラーメッセージ:制御プロセスがエラー コードで終了したため、mysqld.service のジョブ...
ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...
目次序文スロークエリログの設定テスト付録: ログ解析ツール mysqldumpslow要約する序文こ...
目次1. サブクエリとは何ですか? 2. 自己結合3. 自然な結合4. 外部接続1. サブクエリとは...
JS でよく使用されるイベントは次の通りです。ページイベント: load;フォーカス イベント: フ...
以下は、CentOS 6 または CentOS 7 サーバーのディスク領域をクリアするための簡単なコ...
1. 文字セットを確認する1. MYSQLデータベースサーバーとデータベースの文字セットを確認する方...
目次序文レンダリングの役割レンダリング機能の説明レンダリングとテンプレートの違いレンダリング例要約す...
docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...
mysql-5.7.20-winx64.zipインストール手順のないインストール パッケージ: ht...
01. コンパイルオプションとカーネルコンパイルLinux カーネル (英語: linux kern...