JS 树形结构数组遍历方式(深度遍历+广度遍历)

数据结构如下:

   let treeData=[
	   {
		   id:1,
		   children:[{
			   id:2
		   },{
			   id:3,
			   children:[
				   {
					   id:5
				   }
			   ]
		   }]
	   },{
		id:4
	   }
   ]

实现目标:获取所有id的一维数组(不要求顺序)//[1,2,3,4,5]

深度遍历

对单个元素由浅到深,一层层递进循环扒取数据

方法1:
for循环+递归

    function flatten(arr){
		let flatArray=[];
		for(let item of arr){
			item.id&&flatArray.push(item.id);
			if(item.children&&Array.isArray(item.children)){
				flatArray=[...flatArray,...flatten(item.children)]
			}
		
		}
		return flatArray
	}

调用
console.log(flatten(treeData))

结果:
在这里插入图片描述

方法2
借用reduce+递归

	function flatten(arr){
		return arr.reduce((prev,cur)=>{
			 cur.id&&prev.push(cur.id);
			return [...prev,...(cur.children&&Array.isArray(cur.children) ? flatten(cur.children):[] )]
		},[])
	}

调用
console.log(flatten(treeData))

结果:在这里插入图片描述

广度遍历

广度循环,循环最外层,有子层的扒取出来追加到原数组

function flatten(arr){
		let flatArray=[];
		while(arr.length>0){
			let item=arr.shift();
			item.id&&flatArray.push(item.id);
			if(item.children&&Array.isArray(item.children)){
				arr=[...arr,...item.children];
			}
		}
		return flatArray
	}

调用
console.log(flatten(treeData))
结果在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值