JavaScriptはフラットデータをツリー構造データに変換し、ツリー構造をフラットデータに変換します

フラット データをツリー データに変換する

以下は、JavaScript を使用してフラット データをツリー構造データに変換する関数の例です。

function flatToTree(flatData, idKey, parentKey, childrenKey) {
    
    
  const tree = [];
  const map = {
    
    };

  // 将所有节点存储到map中
  flatData.forEach(node => {
    
    
    map[node[idKey]] = node;
    node[childrenKey] = [];
  });

  // 遍历所有节点,将其添加到对应的父节点下
  flatData.forEach(node => {
    
    
    const parent = map[node[parentKey]];
    if (parent) {
    
    
      parent[childrenKey].push(node);
    } else {
    
    
      tree.push(node);
    }
  });

  return tree;
}

この関数は 4 つのパラメータを受け取ります。

  • flatData: フラット レイヤー データ、つまりすべてのノードを含む配列。
  • idKey: ノードIDのキー名。
  • parentKey: 親ノード ID のキー名。
  • childrenKey: 子ノード配列のキー名。

この関数はまず、ツリー構造の空の配列treeと空のノードマップ オブジェクトを作成しますmap次に、すべてのノードを反復処理し、それらを に保存しmap、子の空の配列を各ノードに追加します。次に、すべてのノードを再度走査し、対応する親ノードに追加します。親ノードがない場合は、それを配列に追加しますtree最後にtree配列を返します。

使用例:

const flatData = [
  {
    
     id: 1, name: 'Node 1', parentId: null },
  {
    
     id: 2, name: 'Node 2', parentId: 1 },
  {
    
     id: 3, name: 'Node 3', parentId: 1 },
  {
    
     id: 4, name: 'Node 4', parentId: 2 },
  {
    
     id: 5, name: 'Node 5', parentId: 2 },
  {
    
     id: 6, name: 'Node 6', parentId: 3 },
  {
    
     id: 7, name: 'Node 7', parentId: null },
];

const treeData = flatToTree(flatData, 'id', 'parentId', 'children');
console.log(treeData);

出力結果:

[
  {
    
    
    "id": 1,
    "name": "Node 1",
    "parentId": null,
    "children": [
      {
    
    
        "id": 2,
        "name": "Node 2",
        "parentId": 1,
        "children": [
          {
    
    
            "id": 4,
            "name": "Node 4",
            "parentId": 2,
            "children": []
          },
          {
    
    
            "id": 5,
            "name": "Node 5",
            "parentId": 2,
            "children": []
          }
        ]
      },
      {
    
    
        "id": 3,
        "name": "Node 3",
        "parentId": 1,
        "children": [
          {
    
    
            "id": 6,
            "name": "Node 6",
            "parentId": 3,
            "children": []
          }
        ]
      }
    ]
  },
  {
    
    
    "id": 7,
    "name": "Node 7",
    "parentId": null,
    "children": []
  }
]

ツリー データをフラット データに変換する
以下は、ツリー データをフラット データに再帰的に変換する JavaScript 関数です。

function flattenTreeData(treeData, parentId = null, result = []) {
    
    
  treeData.forEach(node => {
    
    
    const {
    
     id, children, ...rest } = node;
    result.push({
    
     id, parentId, ...rest });
    if (children) {
    
    
      flattenTreeData(children, id, result);
    }
  });
  return result;
}

この関数は 3 つのパラメータを受け取ります。

  • treeData: ツリー構造データ。配列である必要があります。
  • parentId: 現在のノードの親ノードの ID、初期値は ですnull
  • result: フラット レイヤー データを格納するために使用される配列。初期値は です[]

この関数は、まずツリー構造データの各ノードを走査し、それをフラット データ形式に変換し、result配列に追加します。次に、ノードに子ノードがある場合は、flattenTreeData関数を再帰的に呼び出して子ノードをフラット データ形式に変換し、result配列に追加します。

最後に、この関数はresultすべてのノードのフラット データ形式を含む配列を返します。

おすすめ

転載: blog.csdn.net/weixin_41897680/article/details/131409494