js數(shù)組扁平數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)tree

記錄一下日常學(xué)習(xí)雾叭,js數(shù)組扁平數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)tree

演示數(shù)據(jù)

const arr = [
  { id: 1, name: '部門1', pid: 0 },
  { id: 2, name: '部門2', pid: 1 },
  { id: 3, name: '部門3', pid: 1 },
  { id: 4, name: '部門4', pid: 3 },
  { id: 5, name: '部門5', pid: 4 },
]

1.map存儲 唯一性

function formatDataTree (arr, key, parentKey) {
  const result = [];
  const itemMap = {};
  for (const item of arr) {
    const id = item[key];
    const pid = item[parentKey];

    if (!itemMap[id]) {
      itemMap[id] = {
        children: [],
      }
    }

    itemMap[id] = {
      ...item,
      children: itemMap[id]['children']
    }

    const treeItem = itemMap[id];

    if (pid === 0) {
      result.push(treeItem);
    } else {
      if (!itemMap[pid]) {
        itemMap[pid] = {
          children: [],
        }
      }
      itemMap[pid].children.push(treeItem)
    }

  }
  return result;
}

2.遞歸

function translateDataToTreeAllTreeMsg (data, parentKey, parentIDKey) {
  let parent = data.filter((value) => Number(value[parentKey]) <= 0);// 父數(shù)據(jù)
  let children = data.filter((value) => Number(value[parentKey]) > 0);// 子數(shù)據(jù)
  let translator = (parent, children) => {
    parent.forEach((parent) => {
      parent.children = [];
      children.forEach((current, index) => {
        if (current[parentKey] === parent[parentIDKey]) {
          const temp = JSON.parse(JSON.stringify(children));
          temp.splice(index, 1);
          translator([current], temp);
          typeof parent.children !== "undefined"
            ? parent.children.push(current)
            : (parent.children = [current]);
        }
      });
    });
  };
  translator(parent, children);
  return parent;
}

輸出

微信截圖_20220808153617.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子券坞,更是在濱河造成了極大的恐慌熏纯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壮锻,居然都是意外死亡琐旁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門猜绣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灰殴,“玉大人,你說我怎么就攤上這事掰邢∥眨” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵辣之,是天一觀的道長掰伸。 經(jīng)常有香客問我,道長怀估,這世上最難降的妖魔是什么狮鸭? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮多搀,結(jié)果婚禮上歧蕉,老公的妹妹穿的比我還像新娘。我一直安慰自己酗昼,他們只是感情好廊谓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著麻削,像睡著了一般蒸痹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呛哟,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天叠荠,我揣著相機(jī)與錄音,去河邊找鬼扫责。 笑死榛鼎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鳖孤。 我是一名探鬼主播者娱,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苏揣!你這毒婦竟也來了黄鳍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤平匈,失蹤者是張志新(化名)和其女友劉穎框沟,沒想到半個月后藏古,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忍燥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年拧晕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梅垄。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡厂捞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哎甲,到底是詐尸還是另有隱情蔫敲,我是刑警寧澤饲嗽,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布炭玫,位于F島的核電站,受9級特大地震影響貌虾,放射性物質(zhì)發(fā)生泄漏吞加。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一尽狠、第九天 我趴在偏房一處隱蔽的房頂上張望衔憨。 院中可真熱鬧,春花似錦袄膏、人聲如沸践图。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽码党。三九已至,卻和暖如春斥黑,著一層夾襖步出監(jiān)牢的瞬間揖盘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工锌奴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兽狭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓鹿蜀,卻偏偏與公主長得像箕慧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茴恰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354