查询树状图某个值
前言:树状图的数据为层层嵌套的对象,如何在嵌套的对象中查询某个值是否存在呢?
下面这段代码就可以实现
function GetTree(list) { //定义公共方法,该方法接收一个要查询的数组对象。
let arr = []; //定义一个空数组,用来存储筛选出来的数据
function GetListItem(list) { //定义一个闭包,该闭包接收外层的数组对象
list.forEach(item => { //在闭包内遍历数组对象,(解释:在闭包内遍历的原因是因为后面要递归遍历子数组)
arr.push(item.name); //向定义的arr空数组内添加属性值为name的数据(这一块添加的是数组第一层数据)
if (item.children) { //在闭包循环内判断是否存在children这个字段,如果存在则进入递归
GetListItem(item.children) //递归遍历对象数组,该方法接收的参数是对象内部的对象(如果往下一直有则一直递归,直到没有下一层)
}
}
GetListItem(list) //这里调用闭包方法,参数是外面方法的参数,必须一致
return arr //如果递归结束后返回arr数组,(此时arr数组包含的数据是对象内所有name,包括所有子对象)
}
代码解释:上面这段代码使用了递归,首先定义一个闭包,第一轮循环接收的参数都是一样的,第一轮判断数组对象中是否存在children对象,如果存在的话则进入递归,参数为children对象,然后第二轮再次循环children对象,判断children里面是否还有children,如果有则进入递归继续,否则循环下一个,依次类推,直到将对象全部循环完毕之后返回数据。
调用GetTree(arr),然后输出可以查看结果。