扁平化树结构数据的处理

//数据结构
{
    "settings": {
        "timeEpoch": 1234567890123456
    },
    "roots": [
        "5UFZKWUB",
        "6FWCZ3I7",
        "FLC3POSQ"
    ],
    "nodes": [{
            "title": "节点1",
            "parentPath": "5UFZKWUB",
            "sig": "5UFZKWUB",
            "layout": "welcome",
            "assetmappings": [{
                "asset": "asset_12345678",
                "layoutAnchor": "center"
            }]
        },
        {
            "title": "节点2",
            "parentPath": "6FWCZ3I7",
            "sig": "6FWCZ3I7",
            "layout": "centerLeftTabs",
            "assetmappings": [{
                "asset": "",
                "layoutAnchor": "center"
            }]
        },
        {
            "title": "节点21",
            "parentPath": "6FWCZ3I7/YPT7PFNK",
            "sig": "YPT7PFNK",
            "layout": "centerLeftTabs",
            "assetmappings": [{
                "asset": "",
                "layoutAnchor": "center"
            }]
        }, {
            "title": "节点22",
            "parentPath": "6FWCZ3I7/YPT7PFNQ",
            "sig": "YPT7PFNQ",
            "layout": "centerLeftTabs",
            "assetmappings": [{
                "asset": "",
                "layoutAnchor": "center"
            }]
        }, {
            "title": "节点221",
            "parentPath": "6FWCZ3I7/YPT7PFNQ/SIGERASA",
            "sig": "SIGERASA",
            "layout": "centerLeftTabs",
            "assetmappings": [{
                "asset": "",
                "layoutAnchor": "center"
            }]
        }, {
            "title": "节点2211",
            "parentPath": "6FWCZ3I7/YPT7PFNQ/SIGERASA/TTTASDCZ",
            "sig": "TTTASDCZ",
            "layout": "centerLeftTabs",
            "assetmappings": [{
                "asset": "",
                "layoutAnchor": "center"
            }]
        },
        {
            "title": "节点3",
            "parentPath": "FLC3POSQ",
            "sig": "FLC3POSQ",
            "layout": "centerLeftTabs",
            "assetmappings": [{
                "asset": "",
                "layoutAnchor": "center"
            }]
        }
    ],
    "entities": [{
        "sig": ""
    }],
    "assets": [{
            "sig": "asset_2URMUTQR",
            "bucket": "applejuice",
            "osssig": "DRwMv0MFIke6PRZympuHnrQPcXHwnFiL",
            "description": {
                "labels": [],
                "Previews": []
            },
            "mutexType": "VIDEO"
        },
        {
            "sig": "asset_X4GGJETL",
            "bucket": "applejuice",
            "osssig": "fAW5t4SNKmgVgL50rmhjU5sG8pczJfBc",
            "description": {
                "labels": [],
                "Previews": []
            },
            "mutexType": "PAK"
        },
        {
            "sig": "asset_JQTUHDY4",

            "bucket": "applejuice",
            "osssig": "3qUfBLxf5EKmr4NtZTsuYzYRPOtgqmuF",
            "description": {
                "labels": []
            },
            "mutexType": "IMAGE"
        },
        {
            "sig": "asset_HNAYCA0R",

            "bucket": "",
            "osssig": "",
            "description": {
                "labels": [
                    "LandingPage"
                ]
            },
            "mutexType": "META"
        }
    ]
}
//处理方法的调用,content就是上面的整个数据
buildTree(JSON.parse(content).nodes, JSON.parse(content).roots)


//处理扁平化的树节点数据
const buildTree = (nodes, roots) => {
  const nodeMap = new Map(); // 节点映射表
  // 初始化节点映射表
  nodes.forEach(node => {
    node.children = []; // 初始化子节点数组
    nodeMap.set(node.sig, node); // 将节点添加到映射表中
  });

  // 构建树状结构
  const tree = [];
  roots.forEach(rootSig => {
    const rootNode = nodeMap.get(rootSig);
    if (rootNode) {
      tree.push(rootNode);
    }
  });

  // 递归构建子节点
  function buildChildren(parentNode, pathLevels) {
    const parentSig = parentNode.sig;
    nodes.forEach(childNode => {
      const pathArray = childNode.parentPath.split('/');
      const levels = pathArray.length - 1;
      if (levels === pathLevels && pathArray[levels - 1] === parentSig) {
        const newNode = nodeMap.get(childNode.sig);
        parentNode.children.push(newNode);
        buildChildren(newNode, pathLevels + 1); // 递归构建子节点的子节点
      }
    });
  }

  // 从根节点开始构建子节点
  tree.forEach(rootNode => {
    buildChildren(rootNode, 1);
  });

  return tree;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值