js-生成树形结构
生成树形结构
- 在项目中假如后端返回来的有层级的数据没有处理过,需要前端来生成为树形结构的数据
定义数据格式
const result = [
{id:'1',name:'kkdaly',pid:'-1'},
{id:'2',name:'kkdaly',pid:'1'},
{id:'3',name:'kkdaly',pid:'1'},
{id:'4',name:'kkdaly',pid:'2'},
{id:'5',name:'kkdaly',pid:'2'},
{id:'6',name:'kkdaly',pid:'-1'}
]
双循环方法
// 双循环方法
function getTreeResult1(result){
// 定义一个对象用来存储父组件
const allObj = {}
const newArr = []
// 循环数组生成 {id:对象} 类型数据
result.forEach(item =>{
item.children = []
allObj[item.id] = item
})
// 循环result数组,判断数据的pid是否在allObj里,如果在的话就说明这个数据就是allObj数据里其中一个对象的children对象
result.forEach(item =>{
if (allObj[item.pid]){
allObj[item.pid].children.push(item)
}else{
newArr.push(item)
}
})
return newArr
}
const data = getTreeResult1(result); // 调用函数
函数递归方法
// 递归方式写法
function getTreeResult(value,pid){
// 方法是判断数据列表中的一个数据,判断当前获取的数据是否和参数传入的pid相同,如果相同就说明是根数据,或者是一个父数据的子数据
const newArr = []
// 循环数据
for (var i=0; i<value.length; i++){
// 获取单个数据
const node = value[i]
// 判断它的pid是否和函数传递的数据相同
if (node.pid == pid){
// 如果想同就重新调用自己,重新判断当前这个数据的子数据
node.children = getTreeResult(value,node.id)
// 将数据push到新的数组内
newArr.push(node)
}
}
// 返回新的数组
return newArr
}
const data1 = getTreeResult(result,'-1') // 调用函数
本博客所有文章是以学习为目的,如果有不对的地方可以一起交流沟通共同学习 邮箱:1248287831@qq.com!