将扁平数据,转为树形数据,递归处理
代码如下:
<script>
// 需求:将扁平数据转为树形结构
const list = [
{ id: 1, name: "广东", pid: 0 },
{ id: 11, name: "深圳", pid: 1 },
{ id: 12, name: "东莞", pid: 1 },
{ id: 2, name: "湖南", pid: 0 },
{ id: 21, name: "长沙", pid: 2 },
{ id: 22, name: "岳阳", pid: 2 },
];
function ArrTree(list,pid){
// 定义新数组用来存储树形数据
const newArr = []
list.forEach(v => {
// 循环遍历时判断数组每一项的pid是否等于传进来的pid
if(v.pid===pid){
newArr.push(v)
// 再次调用函数,并接收返回的数据,依然传入两个参数,数组和筛选出来的每一项id,省份的pid根市的id是相等的
const children = ArrTree(list,v.id)
if(children.length){
// 将第二次/第三次...的数据添加到children子对象中
newArr[newArr.length-1].children = children
}
}
});
// 返回数据
return newArr
}
// 第一次给函数设置两个参数,数组、因为所有省份的pid都是0设置默认参数
console.log(ArrTree(list,0));
</script>
处理完如图:


浙公网安备 33010602011771号