美文网首页
ztree把简单数据整理成子孙节点数据的算法学习

ztree把简单数据整理成子孙节点数据的算法学习

作者: 缓慢移动的蜗牛 | 来源:发表于2017-12-19 23:15 被阅读0次
  • 示例数据

[
    { id:1, pId:0, name:"父节点1 "},
    { id:11, pId:1, name:"父节点11 "},
    { id:111, pId:11, name:"叶子节点111"},
    { id:112, pId:11, name:"叶子节点112"},
    { id:113, pId:11, name:"叶子节点113"},
    { id:114, pId:11, name:"叶子节点114"},
    { id:12, pId:1, name:"父节点12"},
    { id:121, pId:12, name:"叶子节点121"},
    { id:122, pId:12, name:"叶子节点122"},
    { id:123, pId:12, name:"叶子节点123"},
    { id:124, pId:12, name:"叶子节点124"},
    { id:13, pId:1, name:"父节点13 "},
    { id:2, pId:0, name:"父节点2"},
    { id:21, pId:2, name:"父节点21"},
    { id:211, pId:21, name:"叶子节点211"},
    { id:212, pId:21, name:"叶子节点212"},
    { id:213, pId:21, name:"叶子节点213"},
    { id:214, pId:21, name:"叶子节点214"},
    { id:22, pId:2, name:"父节点22 "},
    { id:221, pId:22, name:"叶子节点221"},
    { id:222, pId:22, name:"叶子节点222"},
    { id:223, pId:22, name:"叶子节点223"},
    { id:224, pId:22, name:"叶子节点224"},
    { id:23, pId:2, name:"父节点23"},
    { id:231, pId:23, name:"叶子节点231"},
    { id:232, pId:23, name:"叶子节点232"},
    { id:233, pId:23, name:"叶子节点233"},
    { id:234, pId:23, name:"叶子节点234"},
    { id:3, pId:0, name:"父节点3 "}
]
  • 整理成子孙节点的方法

//定义一些变量
var key='id',parentKey='pId',childKey='children';
//具体方法
function reconstruction(sNodes){
    var r = [];
    var tmpMap = {};
      
    //先把数组整理成map的形式
    for (i = 0, l = sNodes.length; i < l; i++) {
       // key为 对象的"id"的值, value就是就该对象
        tmpMap[sNodes[i][key]] = sNodes[i];
    }
      
   //遍历,组织成子孙节点
    for (i = 0, l = sNodes.length; i < l; i++) {
        //查找当前节点的父节点是否存在,如果存在就把当前节点放入到父节点的子孙列表中
        if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
            if (!tmpMap[sNodes[i][parentKey]][childKey])
                tmpMap[sNodes[i][parentKey]][childKey] = [];
            tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
        } else {
           //如果不存在就直接放入到一个新的列表中
            r.push(sNodes[i]);
        }
    }
    return r;
}

历来对数据进行排序大致有两种思想:以时间换空间,以空间换时间
原来自己写的方法是采用循环遍历,数据量越大越慢,而且会导致浏览器崩溃
此方法,速度就很快,只需要两遍遍历即可,典型的以空间换取时间

相关文章

  • ztree把简单数据整理成子孙节点数据的算法学习

    示例数据 整理成子孙节点的方法 历来对数据进行排序大致有两种思想:以时间换空间,以空间换时间原来自己写的方法是采用...

  • 创建 ZTree

    使用标准json数据构造ztree 4.2使用简单json数据构造ztree(建议) 发送ajax请求获取菜单数据...

  • ztree只有最后一个节点显示的坑!

    在项目中用ztree的时候发现只有最后一个父节点有数据,其他父节点的子节点数据加载不出来。 检查数据结构后没有发现...

  • tree闭包表

    目标 在一颗树中快速查找到子孙节点、祖先节点 查找节点A的所有子孙节点 node表的数据 查找节点A的子孙节点,可...

  • Orange3的Tree 和Tree view的使用

    Tree是一个比较简单的算法,可以根据分类的纯度将数据划分为多个节点;orange的树可以处理离散数据集和连续数据...

  • Python实现一个新币种

    简单区块链模型,实现了链式结构,创建区块,添加交易数据,共识算法(POW挖矿),分叉选择,工作量证明,多节点数据一...

  • K近邻算法识别数字---OpenCV-Python开发指南(40

    K近邻算法 机器学习算法是从数据中产生模型,也就是进行学习的算法。我们把经验提供给算法,它就能够根据经验数据产生模...

  • 可搜索多选树形图(web前端)

    实现了多选框,可搜索,父节点后显示子节点个数,树形图,插件用的是zTree.js,demo里写了测试数据,可以替换...

  • Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子。 编程好比是一辆汽车,而数据...

  • 分表分库的一些思考

    1.一致性hash算法,如果用来做分表分库,添加节点或者删除节点,原数据应该怎么处理???根据hash算法刷数据?...

网友评论

      本文标题:ztree把简单数据整理成子孙节点数据的算法学习

      本文链接:https://www.haomeiwen.com/subject/lghwwxtx.html