亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

js 將線性數據轉為樹形的示例代碼

2024-05-06 16:51:30
字體:
來源:轉載
供稿:網友

在日常開發工作中,我們經常碰到將線性的數據轉換成樹的需求,今天給大家分享一個簡單的轉換算法。

數據結構

下面是我們轉換前的數據:

[  {    "id":1,    "parent_id":0,    "name":"四川省"  },  {    "id":2,    "parent_id":0,    "name":"廣東省"  },  {    "id":3,    "parent_id":0,    "name":"江西省"  },  {    "id":5,    "parent_id":1,    "name":"成都市"  },  {    "id":6,    "parent_id":5,    "name":"錦江區"  },  {    "id":7,    "parent_id":6,    "name":"九眼橋"  },  {    "id":8,    "parent_id":6,    "name":"蘭桂坊"  },  {    "id":9,    "parent_id":2,    "name":"東莞市"  },  {    "id":10,    "parent_id":9,    "name":"長安鎮"  },  {    "id":11,    "parent_id":3,    "name":"南昌市"  }]

我們轉換后的結果是:

[  {    "id":1,    "parent_id":0,    "name":"四川省",    "children":[      {        "id":5,        "parent_id":1,        "name":"成都市",        "children":[          {            "id":6,            "parent_id":5,            "name":"錦江區",            "children":[              {                "id":7,                "parent_id":6,                "name":"九眼橋"              },              {                "id":8,                "parent_id":6,                "name":"蘭桂坊"              }            ]          }        ]      }    ]  },  {    "id":2,    "parent_id":0,    "name":"廣東省",    "children":[      {        "id":9,        "parent_id":2,        "name":"東莞市",        "children":[          {            "id":10,            "parent_id":9,            "name":"長安鎮"          }        ]      }    ]  },  {    "id":3,    "parent_id":0,    "name":"江西省",    "children":[      {        "id":11,        "parent_id":3,        "name":"南昌市"      }    ]  }]

實現代碼

let array = [  {    id: 1,    parent_id: 0,    name: "四川省"  },  {    id: 2,    parent_id: 0,    name: "廣東省"  },  {    id: 3,    parent_id: 0,    name: "江西省"  },  {    id: 5,    parent_id: 1,    name: "成都市"  },  {    id: 6,    parent_id: 5,    name: "錦江區"  },  {    id: 7,    parent_id: 6,    name: "九眼橋"  },  {    id: 8,    parent_id: 6,    name: "蘭桂坊"  },  {    id: 9,    parent_id: 2,    name: "東莞市"  },  {    id: 10,    parent_id: 9,    name: "長安鎮"  },  {    id: 11,    parent_id: 3,    name: "南昌市"  }]function listToTree(list) {  let map = {};  list.forEach(item => {    if (! map[item.id]) {      map[item.id] = item;    }  });  list.forEach(item => {    if (item.parent_id !== 0) {      map[item.parent_id].children ? map[item.parent_id].children.push(item) : map[item.parent_id].children = [item];    }  });    return list.filter(item => {    if (item.parent_id === 0) {      return item;    }  })}console.log(listToTree(array));

分析

這段代碼的核心就在 listToTree 方法中,這個方法分為了三個部分:

第一部分

第一部分先將數組中的所有元素都復制到 map 中(注意:這里是引用復制哦,這個細節很重要)。

第二部分

執行第二次遍歷前的 map:

// map{ ..., "3":{    "id":3,    "parent_id":0,    "name":"江西省"  },  ...}

然后這個時候遍歷 parent_id 不等于 0 的元素:

[ ..., { id: 11, parent_id: 3, name: "南昌市" },  ...]

然后發現南昌市有 parent_id,我們再給 map[item.parent_id] 設置子元素,通過南昌市的 parent_id 可以推導出:

map["3"].children ? map["3"].children.push(item) : map[3].children = [item];

上面的代碼判斷了是否存在 children,如果不存在則直接給它賦值,否則將值 push 到 children 中。

執行完第二步后,我們已經把子節點添加到了它的父節點上,但是我們并沒有刪除掉之前的子節點。所以第三部就是對數據進行過濾,只要父節點即可。

js,線性數據,樹形,代碼

總結

需要注意的是,我們一直都是對 map 進行操作的,但是結果怎么到了 list 上呢,這就是上面提到的引用復制。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久高潮| 92福利视频午夜1000合集在线观看| 欧美成人午夜剧场免费观看| 欧美亚洲在线观看| 国产精品欧美久久久| 日韩欧美在线视频日韩欧美在线视频| 亚洲娇小xxxx欧美娇小| 欧美日韩免费在线| 亚洲午夜精品久久久久久性色| 在线免费看av不卡| 777午夜精品福利在线观看| 色综合视频一区中文字幕| 亚洲激情自拍图| 中文字幕亚洲天堂| 欧美成人三级视频网站| 欧美香蕉大胸在线视频观看| 中文字幕亚洲一区二区三区| 欧美性xxxxhd| 成人福利视频网| 乱亲女秽乱长久久久| 九九热最新视频//这里只有精品| 国内精品久久久久| 久久的精品视频| 日韩视频免费看| 国产精品老女人精品视频| 另类天堂视频在线观看| 精品美女永久免费视频| 91久久精品国产| 国产高清视频一区三区| 久久综合伊人77777蜜臀| 精品久久久久久久大神国产| 色狠狠av一区二区三区香蕉蜜桃| 国产精品大片wwwwww| 精品亚洲国产成av人片传媒| 538国产精品视频一区二区| 中文字幕成人精品久久不卡| 国产精品自拍偷拍| 欧美精品在线播放| 国产在线久久久| 亚洲欧美国产日韩天堂区| 中文字幕在线日韩| 91中文字幕在线观看| 久久综合伊人77777尤物| 91日韩在线视频| 欧美亚洲午夜视频在线观看| 日韩精品在线播放| 久久久久国产精品免费网站| 亚洲人成电影网站色www| 91久久久久久久久久久| 精品一区精品二区| 亚洲成人av片在线观看| 久久视频免费在线播放| 国产精品三级美女白浆呻吟| 欧美日韩成人网| 国产亚洲精品久久久久久牛牛| 国产成人综合av| 亚洲精品国产综合久久| 性欧美暴力猛交69hd| 精品激情国产视频| 2019亚洲日韩新视频| 亚洲一区二区三区乱码aⅴ| 亚洲国产精品99| 欧美激情欧美激情| 国产精品av在线| 亚洲国模精品私拍| 久久精品成人欧美大片| 国产精品亚洲欧美导航| 亚洲精品国产电影| 这里只有精品在线播放| 精品av在线播放| 久久久之久亚州精品露出| 一区二区三区黄色| 日韩欧美在线看| 一本色道久久88亚洲综合88| 深夜福利91大全| 日本精品一区二区三区在线| 亚洲精品国产拍免费91在线| 国产www精品| 曰本色欧美视频在线| 国产精品久久久久久婷婷天堂| 欧美xxxx做受欧美.88| 国产精品免费一区二区三区都可以| 国产一区二区三区网站| 日韩成人av一区| 在线看欧美日韩| 欧美成人sm免费视频| 91精品久久久久久久久中文字幕| 日韩免费黄色av| 欧美日韩免费网站| 亚洲91精品在线| 91性高湖久久久久久久久_久久99| 国产精品爽黄69天堂a| 色哟哟网站入口亚洲精品| 亚洲第一福利视频| 亚洲高清久久久久久| 亚洲国产欧美一区二区三区同亚洲| 色狠狠av一区二区三区香蕉蜜桃| 亚洲第一二三四五区| 国产精品91在线观看| 国产精品一二三视频| 日韩成人在线播放| 亚洲加勒比久久88色综合| 欧美精品videosex牲欧美| 91国自产精品中文字幕亚洲| 欧美黑人一区二区三区| 一区二区中文字幕| 亚洲xxxx3d| 欧美日韩成人在线播放| 欧美超级乱淫片喷水| 2019中文字幕在线免费观看| 久久久999成人| 久久久久五月天| 国产精品日韩在线一区| 欧美一区视频在线| 在线日韩精品视频| 国产精品欧美一区二区| 日韩av综合中文字幕| 日本在线观看天堂男亚洲| 亚洲免费av片| 亚洲精品720p| 亚洲国产精彩中文乱码av在线播放| 91九色国产社区在线观看| 热99精品只有里视频精品| 欧美精品中文字幕一区| 日韩最新免费不卡| 91久久久久久久久久久| 欧美插天视频在线播放| 日韩有码视频在线| 欧美夜福利tv在线| 国产做受高潮69| 亚洲国产精品99| 91成人免费观看网站| 亚洲欧美激情四射在线日| 国产精品视频xxx| 欧美激情手机在线视频| 日韩中文在线中文网三级| 日韩极品精品视频免费观看| 91精品国产91久久久久福利| 欧美黑人巨大精品一区二区| 亚洲网站视频福利| 亚洲免费人成在线视频观看| 国产在线精品一区免费香蕉| 亚洲第一区第二区| 亚洲欧美国产制服动漫| 亚洲欧美日韩精品| 日韩av观看网址| 国产在线观看精品| 中文字幕久热精品在线视频| 91福利视频在线观看| 国内偷自视频区视频综合| 色哟哟亚洲精品一区二区| 久久久国产精品免费| 欧美另类极品videosbestfree| 国产精品青青在线观看爽香蕉| 亚洲精品aⅴ中文字幕乱码| 国产精品h在线观看| 久久国产精品久久国产精品| 日韩av在线精品| 日本aⅴ大伊香蕉精品视频| 亚洲第一中文字幕在线观看| 日韩av免费在线观看| 欧美日韩成人精品| 久久久伊人欧美| 26uuu另类亚洲欧美日本老年|