zoukankan      html  css  js  c++  java
  • 数组转为树形结构以及树形结构平铺成数组

     1 var source = [
     2         {
     3           id: 1,
     4           pid: 0,
     5           name: 'body',
     6         },
     7         {
     8           id: 5555,
     9           pid: 0,
    10           name: 'script',
    11         },
    12         {
    13           id: 55551,
    14           pid: 5555,
    15           name: 'js',
    16         },
    17         {
    18           id: 2,
    19           pid: 1,
    20           name: 'title',
    21         },
    22         {
    23           id: 3,
    24           pid: 1,
    25           name: 'div',
    26         },
    27         {
    28           id: 4,
    29           pid: 3,
    30           name: 'span',
    31         },
    32         {
    33           id: 5,
    34           pid: 3,
    35           name: 'icon',
    36         },
    37         {
    38           id: 6,
    39           pid: 4,
    40           name: 'subspan',
    41         },
    42       ];
    43 
    44       function toTree(data) {
    45         let result = [];
    46         if (!Array.isArray(data)) {
    47           return result;
    48         }
    49         data.forEach((item) => {
    50           delete item.children;
    51         });
    52         let map = {};
    53         data.forEach((item) => {
    54           map[item.id] = item;
    55         });
    56         data.forEach((item) => {
    57           let parent = map[item.pid];
    58           if (parent) {
    59             (parent.children || (parent.children = [])).push(item);
    60           } else {
    61             result.push(item);
    62           }
    63         });
    64         return result;
    65       }
    66       console.log("树结构===", toTree(source));
    67 
    68 
    69       let newTree = toTree(source);
    70       var resultArr = [];
    71       function flat(nodes, parentId) {
    72         if (!nodes || nodes.length === 0) return [];
    73         nodes.forEach((node) => {
    74             resultArr.push({ ...node });
    75           return flat(node.children, node.id);
    76         });
    77       }
    78 
    79       flat(newTree, 0);
    80       console.log("铺平===", resultArr)
  • 相关阅读:
    预览上传
    使用 Vagrant 打造跨平台开发环境fffff
    使用 Vagrant 打造跨平台开发环境
    弱智python小游戏猜数字
    Linux设置固定IP
    call_user_func
    mongodb 下载安装 转
    chrome浏览器下的xdebug helper使用方法
    类似NL的update更新
    如何启用并行?
  • 原文地址:https://www.cnblogs.com/yuhanao/p/13128998.html
Copyright © 2011-2022 走看看