JS对象数组中叶子对象和非叶子对象数组(二十五)

简介: JS对象数组中叶子对象和非叶子对象数组(二十五)

一 . 叶子对象和非叶子对象


在项目开发中,老蝴蝶常常遇见这样的问题, 对于一个自身关联的表数据,如权限数据,可参照上一章的数据内容,为了方便,这儿直接拿过来。


如一个权限表:

2019101214411726.png

后端返回给前端的数据格式是,



20191012144039203.png


用的是bootstrap-table 展示 。


常常要分开叶子对象和非叶子对象。 叶子对象,就是没有子节点的数据,如 ‘部门添加功能’ 这个节点。 非叶子对象,就是指有子节点的数据,如 ‘部门管理’ 权限, 有 添加,修改,删除三个子节点。 在展示的时候,要分别展示出不同的效果,非叶子对象展示成什么样式的,叶子对象展示成什么样式的。 如导航时, 导航只显示有叶子节点的。


数据响应,响应结果与上一章一样。


二. 两个判断叶子对象和非叶子对象的方法


先遍历一下,所有的父节点。 把所有的父节点 Id放置在一个集合里面。 再遍历一下data 数据,如果id 在父级里面,那么说明有子级,非叶子对象,如果不在父级里面,说明没有子级,为叶子对象。


/**
 * 所有非叶子节点的对象,有下一级的对象。
 * @param data 数据
 * @param idName id名称
 * @param pIdName 父级的名称
 */
function listToHaveSon(data,idName,pIdName){
  var newData=[];
  var parentIdList=new Array();
  $.each(data,function(idx,item){
    //把所有的父节点放置进来。
    if(item[pIdName]){  //有值,就放置进来。
      parentIdList.push(item[pIdName]);
    }
  })
  $.each(data,function(idx,item){
    if(parentIdList.indexOf(item[idName])!=-1){ //有当前的
      newData.push(item);
    }
  })
  return newData;
}
/**
 * 所有叶子节点的对象,即没有下一级的对象。
 * @param data 数据
 * @param idName id名称
 * @param pIdName 父级的名称
 */
function listToNoHaveSon(data,idName,pIdName){
  var newData=[];
  var parentIdList=new Array();
  $.each(data,function(idx,item){
    //把所有的父节点放置进来。
    if(item[pIdName]){  //有值,就放置进来。
      parentIdList.push(item[pIdName]);
    }
  })
  $.each(data,function(idx,item){
    if(parentIdList.indexOf(item[idName])==-1){  //没有当前的。
      newData.push(item);
    }
  })
  return newData;
}


三. 验证输出


bootstrap-table 响应。


function handleClientData(res){
  var privilegeList=res.privilegeList?res.privilegeList:[];
  var resultData=listToTree(privilegeList,"id","parentid");
  var haveSonData=listToHaveSon(privilegeList,"id","parentid");
  console.log("有子节点的:"+JSON.stringify(haveSonData));
  var haveNoSonData=listToNoHaveSon(privilegeList,"id","parentid");
  console.log("没有节点的:"+JSON.stringify(haveNoSonData));
  return resultData;
}


20191012144210259.png


谢谢!!!

相关文章
|
3天前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
7天前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
7天前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
26天前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
17 2
|
29天前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
20 3
|
1月前
|
存储 JavaScript 前端开发
JavaScript 对象的概念
JavaScript 对象的概念
35 4
|
1月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
34 4
|
29天前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
29 1
|
30天前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
15 2
|
1月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
23 5
下一篇
无影云桌面