下面采用的方式比較 遞歸 來(lái)講,時(shí)間要快很多,遞歸也是同樣可以實(shí)現(xiàn)這類效果
function createThree(list) {
var map = {}, // 創(chuàng)建一個(gè)用ID作Key的對(duì)象
listData = [], // 創(chuàng)建一個(gè)空數(shù)組,用來(lái)接收傳入的數(shù)組
paraArray = []; // 返回的數(shù)組
// 循環(huán)遍歷出map對(duì)象和數(shù)組格式
list.forEach((item) => {
// 給map,listData賦值
map[item.id] = item;
listData.push(item);
});
// 循環(huán)數(shù)組
listData.forEach((item) => {
// 根據(jù)父級(jí)的ID,找到對(duì)應(yīng)的對(duì)象
var even = map[item.parentId];
// 判斷對(duì)象是否存在,存在的話,進(jìn)行深層次的判斷
if (even) {
// 判斷父級(jí)是否存在子級(jí),存在進(jìn)行傳值
if (even.children) {
even.children.push(item);
} else {
// 不存在,創(chuàng)建子級(jí),進(jìn)行傳值
even.children = [];
even.children.push(item);
}
} else {
// 對(duì)象不存在,做為初始的值,傳入空數(shù)組
paraArray.push(item);
}
});
return paraArray;
}