下面采用的方式比较 递归 来讲,时间要快很多,递归也是同样可以实现这类效果
function createThree(list) {
var map = {}, // 创建一个用ID作Key的对象
listData = [], // 创建一个空数组,用来接收传入的数组
paraArray = []; // 返回的数组
// 循环遍历出map对象和数组格式
list.forEach((item) => {
// 给map,listData赋值
map[item.id] = item;
listData.push(item);
});
// 循环数组
listData.forEach((item) => {
// 根据父级的ID,找到对应的对象
var even = map[item.parentId];
// 判断对象是否存在,存在的话,进行深层次的判断
if (even) {
// 判断父级是否存在子级,存在进行传值
if (even.children) {
even.children.push(item);
} else {
// 不存在,创建子级,进行传值
even.children = [];
even.children.push(item);
}
} else {
// 对象不存在,做为初始的值,传入空数组
paraArray.push(item);
}
});
return paraArray;
}