二維樹形數(shù)據(jù)轉(zhuǎn)化標(biāo)準(zhǔn)層級(jí)樹形結(jié)構(gòu)數(shù)據(jù)

方法一:按層級(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ù)。

友情鏈接更多精彩內(nèi)容