一种根据层级编码规则将数据整理为树状结构的方法

数据特征

分级编码:如一级1001 - 二级节点100101 - 三级节点 10010101

数据样例

编码字段为subjcode
在这里插入图片描述

思路

递归方式,从编码位数多到少,依次寻找并挂接到父节点,走到最低编码位数,完成。

代码

参数resData即是上图数据样例的数据,编码字段为subjcode。
【不再解释了哈】

function parseToResultData(resData) {
	var codeDic = {};
	var codeMaxLen = 0;
	var codeMinLen = 100;
	resData.forEach((item) => {
		codeDic[item.subjcode] = item;
		if (item.subjcode.length > codeMaxLen) {
			codeMaxLen = item.subjcode.length;
		}

		if (item.subjcode.length < codeMinLen) {
			codeMinLen = item.subjcode.length;
		}
	});

	console.log("编码最短位数:" + codeMinLen);
	console.log("编码最长位数:" + codeMaxLen);

	for (var s = codeMaxLen; s > codeMinLen; s -= 2) {
		resData.forEach(item => {
			if (item.subjcode.length == s) {
				var pcode = item.subjcode.substring(0, s - 2);
				if (codeDic[pcode] != undefined) {
					if (codeDic[pcode].children == undefined) {
						codeDic[pcode].children = [item];
					} else {
						codeDic[pcode].children.push(item);
					}
				} else {
					console.log("未找到父节点", item);
				}
			}
		});

		console.log("完成:" + s);
	}

	var resultData = [];
	Object.keys(codeDic).forEach(k => {
		if (("" + k).length == codeMinLen) {
			resultData.push(codeDic[k]);
		}
	});
	
	console.log("resultData", resultData);

	return resultData;


}

解析完成后的数据结构如下,可用于绑定到树控件:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值