方法一:按層級(jí)遍歷
function treeOptionsFromQueryResult1(data, id, pid, rootPid) {
//data:源數(shù)據(jù),id:元素id,pid:父元素id;rootPid:根節(jié)點(diǎn)id
const parentChildrenMap = {}; //首先構(gòu)造所有父子關(guān)系的對(duì)象,即每一層數(shù)據(jù)與下級(jí)數(shù)據(jù)對(duì)應(yīng)關(guān)系
each(data, (row) => {
if (parentChildrenMap[row[pid]] === undefined) {
parentChildrenMap[row[pid] = [];
}
parentChildrenMap[row[pid].push({
id: row[id],
children: [],
name: row.name,
});
});
let q = [];
q.push(parentChildrenMap[rootPid][0]);//可以理解為children元素,首次push根節(jié)點(diǎn)
while (q.length > 0) { //判斷如果p長(zhǎng)度大于0執(zhí)行邏輯,與下面每次shift刪除首元素構(gòu)成遍歷
const curNode = q.shift();//取到當(dāng)前節(jié)點(diǎn)就是q里面的首節(jié)點(diǎn),并在q里面刪除
curNode.children = parentChildrenMap[curNode.id];//根據(jù)之前父子對(duì)應(yīng)關(guān)系給當(dāng)前節(jié)點(diǎn)賦予children子元素集合
q = union(q, curNode.children); //union為lodash庫(kù)里面的方法,遍歷children元素,為每一項(xiàng)賦它的子元素集合
}
return parentChildrenMap[rootPid];//返回對(duì)象里面的根節(jié)點(diǎn)對(duì)應(yīng)的值
}
方法二:
function getTreeData(data, id, pid, children, rootPid) {
const cloneData = JSON.parse(JSON.stringify(data));
return cloneData.filter((father) => {
const childrenArr = cloneData.filter(child => father[id] === child[pid]);
father[children] = childrenArr.length > 0 ? childrenArr : '';
return father[pid] === rootPid;
});
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。