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)
  • 相关阅读:
    *Integer to English Words
    *Palindrome Linked List
    *Partition List
    Sort Colors
    wireshark tls
    find 路径必须在表达式之前
    http://mozilla.debian.net/
    maven bundle
    xmpp
    xmlns=""
  • 原文地址:https://www.cnblogs.com/yuhanao/p/13128998.html
Copyright © 2011-2022 走看看