根据id和parent_id二维树形结构数据生成嵌套树形结构数据

data = [
	{id: 1, parent_id: 0, name: "A"},
	{id: 2, parent_id: 1, name: "AA"},
	{id: 3, parent_id: 1, name: "AB"},
	{id: 4, parent_id: 3, name: "ABA"},
	{id: 5, parent_id: 3, name: "ABB"},
	{id: 6, parent_id: 3, name: "ABC"},
	{id: 7, parent_id: 1, name: "AC"},
	{id: 8, parent_id: 7, name: "ACA"},
	{id: 9, parent_id: 8, name: "ACAA"},
	{id: 10, parent_id: 8, name: "ACAB"},
]
function list_to_tree(data) {
	/**
	* @data: 由id和parent_id组成的树形结构二维数据, 元数据中id必须大于0
	*/
	res = {};
	for (let i = 0; i < data.length; i++) {
	    row = data[i];
	    // 此行代码用以统一根节点的paren_id, 跟节点的parent_id 可以为 0 或 null
	    row.parent_id = row.parent_id ? row.parent_id : 0
		if (res[row.id]) {
			Object.assign(res[row.id], {id: row.id, text: row.name});
	    } else {
			res[row.id] = {id: row.id, text: row.name, children: []};
	    }
	    if (res[row.parent_id]) {
	        res[row.parent_id].children.push(res[row.id]);
	    } else {
			res[row.parent_id] = {children: [res[row.id]]};
	    }
	}
	return res[0].children
}
const nest = (items, id = null, link = 'parent_id') =>
  items
    .filter(item => item[link] === id)
    .map(item => ({ ...item, children: nest(items, item.id) }));

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值