js一维数组还原树形结构

本文介绍了如何将给定的一维数组转换为树形结构,提供了一个JavaScript函数实现,并讨论了可能的优化方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出如下一维数组:

var arr = [
		{id:1,pid:null,name:'中国'},
		{id:2,pid:1,name:'湖北省'},
		{id:3,pid:2,name:'武汉市'},
		{id:4,pid:2,name:'恩施州'},
		{id:5,pid:1,name:'四川省'},
	];

请写一个函数将 arr 转成如下,树状结构

	obj = {
		id:1,
		pid:null,
		name:'中国',
		child:[
			{
				id:2,
				pid:1,
				name:'湖北省',
				child:[
					{
						id:3,
						pid:2,
						name:'武汉市'
					},
					{
						id:4,
						pid:2,
						name:'恩施州'
					}
				]
			},
			{
				id:5,
				pid:1,
				name:'四川省'
			}
		]
	};

下面是一个完成上面需求的函数:

	function t(arr,removeIndex){
		if(removeIndex instanceof Array){
			for(var index of removeIndex.reverse()){
				arr.splice(index,1);
			}
		}

		if(arr.length == 1) return arr[0];

		var indexArr = arr.map(function(obj,index){
			return obj.pid;
		})

		var maxPid = Math.max.apply(null,indexArr);//找到底层的pid

		var removeIndex = [];

		var pushArr = arr.filter(function(obj,index){
			if(obj.pid == maxPid){
				removeIndex.push(index);
			}
			return obj.pid == maxPid;
		});//找到最底层的 数据

		var currentIndex = arr.findIndex(function(obj,index){
			return  obj.id == maxPid
		});//找到最底层的上一层

		arr[currentIndex].child = pushArr;//将最底层数据放到上一层的数据中

		return t(arr,removeIndex);//依次递归
	}

	t(arr);

下在逆推回去

	function t1(obj,arr){
		if(!(arr instanceof Array)){
			arr = [];
		}
		if(obj.child instanceof Array){
			child = obj.child;
			for(var _obj of child){
				t1(_obj,arr)				
			}
		}
		delete obj.child;
		
		arr.push(obj);
		return arr;
	}

有什么可以改进的欢迎指出,今天就到这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值