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

古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。

上一章简单介绍了JS对象数组的递归排序(二十四),如果没有看过,请观看上一章

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

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

https://img-blog.csdnimg.cn/20191012140711644.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly95dWVqbC5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70
后端返回给前端的数据格式是,
参照上一章内容。 有图片。
用的是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;
}

有图片。

谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个蝴蝶飞

你的鼓励,是老蝴蝶更努力写作的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值