zoukankan      html  css  js  c++  java
  • javascript当中的无限分类

    var data = [
            {id:100000, name :"1", pid :0},
            {id:100100, name :"1-1", pid :100000, },
            {id:100101, name :"1-1-1", pid :100100, },
            {id:200000, name :"2", pid :0, }, 
            {id:210000, name :"2-1", pid :200000, },
            {id:211000, name :"2-1-1", pid :210000, },
            {id:211100, name :"2-1-1-1", pid :211000, },
            {id:211110, name :"2-1-1-1-1", pid :211100, },
            {id:211111, name :"2-1-1-1-1-1", pid :211110, }
        ]
        function toTree(data) {
          
            // 删除 所有 children,以防止多次调用
            data.forEach(function (item) {
                delete item.children;
            });
            console.log(data)
            // 将数据存储为 以 id 为 KEY 的 map 索引数据列
            var map = {};
            data.forEach(function (item) {
                map[item.id] = item;
            });
            console.log(map);
            var val = [];
            data.forEach(function (item) {
                // 以当前遍历项,的pid,去map对象中找到索引的id
                var parent = map[item.pid];
                console.log(parent);
                debugger
                // 好绕啊,如果找到索引,那么说明此项不在顶级当中,那么需要把此项添加到,他对应的父级中
                if (parent) {
                    (parent.children || ( parent.children = [] )).push(item);
                    console.log(data,val);
    
                } else {
                    //如果没有在map中找到对应的索引ID,那么直接把 当前的item添加到 val结果集中,作为顶级
                    val.push(item);
                }
            });
    
            return val;
        }
    
        console.log(toTree(data))
    

      

  • 相关阅读:
    为什么编程是独一无二的职业
    TSQL 编程规范
    Windows实战Git环境配置msysGit+TortoiseGit
    Linux环境下Socket编程
    数据持久化
    Javascript类的定义和引用
    详解C中volatile关键字
    ACM HDU 1040 As Easy As A+B
    ACM POJ 1753Flip Game
    ACM HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/En-summerGarden/p/9365610.html
Copyright © 2011-2022 走看看