精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JS中樹的查找:通過子節點ID查找所有關聯的父節點

開發 前端
樹是JS中非常常見的數據結構。知識庫目錄,側邊欄菜單,字典目錄,企業組織架構等都可能會用到樹的操作。

提示:底部有完整的源碼,童鞋們有需要可以CTRL + C拿走,但我建議你能真正理解實現原理,而不是直接CTRL + C。

樹是JS中非常常見的數據結構。知識庫目錄,側邊欄菜單,字典目錄,企業組織架構等都可能會用到樹的操作。

不知道大家有沒有使用過element-ui等組件庫中的級聯選擇器?它所接收的數據類型就是樹形結構的數組。級聯選擇器的綁定值是被選中的一系列父子節點id構成的數組,而后端通常僅需要我們提供最后一個葉子節點的id;然而,在編輯的時候,我們僅提供最后一個葉子節點的id是無法還原級聯選擇器選項的選中狀態的;所以,我們需要通過該節點id將與其關聯的父節點全部查找出來,得到一個與級聯選擇器適配的數據。

現在,我們實現根據節點id查找關聯的父節點函數getTreeIds。我們先定義一個空函數,該函數需要接收3個參數:樹形結構數組tree,節點id,節點信息配置config。config用于配置id和children字段,因為這是一個通用函數,我們需要應對后端開發者使用的children和id字段可能存在的不統一問題。

export const getTreeIds = (tree, nodeId, config) => {}

下面的所有代碼全部寫在getTreeIds函數體內。現在,我們從config中拿到children和id字段,并分別設置一個默認值。

const { children = 'children', id = 'id' } = config || {}

假設我們的數據結構是下面這樣的,該如何通過子節點查找父節點呢?我們都知道,父子節點的關聯是通過children字段建立的。可惜這個關聯是單向的,我們只能通過父節點查找子節點,而不能通過子節點查找父節點,因為我們的子節點缺少對父節點的引用。

[
{
id: 1,
label: 'test1',
children: [
{
id: 2,
label: 'test1-1',
children: [ { id: 3, label: 'test1-1-1' }]
}
]
}
]

我們需要編寫一個函數手動將子節點與父節點建立綁定。最簡單的查找方式就是將樹形結構轉化為扁平化數組,并建立關聯,然后再進行查找。

toFlatArray函數的源碼如下,我們使用數組的reduce方法對樹形結構數組進行聚合遞歸轉化為扁平化的樹,將parentId字段添加到子節點,這樣我們就建立了子節點到父節點的關聯。

const toFlatArray = (tree, parentId) => {
return tree.reduce((t, _) => {
const child = _[children]
return [
...t,
parentId ? { ..._, parentId } : _,
...(child && child.length ? toFlatArray(child, _[id]) : [])]
}, [])
}

然后,我們創建getIds函數,該函數接收一個扁平化的樹,使用while循環進行查找,如果存在parentId,我們就把它添加到ids數組的開頭,一直查找到樹的根部。最后,我們返回ids數組。

const getIds = flatArray => {
let ids = [nodeId]
let child = flatArray.find(_ => _[id] === nodeId)
while (child && child.parentId) {
ids = [child.parentId, ...ids]
child = flatArray.find(_ => _[id] === child.parentId)
}
return ids
}

最后,我們在getTreeIds函數體的尾部,將標準樹轉化為扁平化的樹后傳遞給getIds函數返回的ids數組返回。

return getIds(toFlatArray(tree))

現在,我們大功告成了。我們可以用一些假數據測試一下:

const treeData = [
{
id: 1,
label: 'test1',
children: [
{
id: 2,
label: 'test1-1',
children: [
{
id: 3,
label: 'test1-1-1'
},
{
id: 4,
label: 'test1-1-2',
children: [
{
id: 5,
label: 'test1-1-1-1'
}
]
}
]
}
]
}
]
console.log(getTreeIds(treeData, 5)) // 輸出 [1, 2, 4, 5]
console.log(getTreeIds(treeData, 3)) // 輸出 [1, 2, 3]

童鞋們,學會了嗎?是不是很簡單?

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-08-18 13:31:44

SQL Server數子節點查詢所有父節點

2023-06-16 07:48:51

DOM對象JS

2014-11-17 09:51:39

PHP

2023-11-03 08:08:00

MySQL子節點

2023-02-13 11:26:03

符號鏈接Linux

2023-07-18 07:19:59

2024-10-24 10:16:36

2023-01-30 14:27:14

Linux進程

2022-04-15 10:37:00

權限進程UAC

2021-09-03 08:58:00

二叉搜索樹節點

2020-12-22 08:56:51

JavaScript數據結構前端

2022-05-10 07:20:18

Linux系統密碼

2023-01-28 08:24:28

MySQL索引B+樹

2022-12-26 00:51:33

雙向鏈表二叉搜索樹

2017-10-10 16:59:28

Java數據結構算法解析

2009-11-06 14:51:14

WCF配置子節點

2012-04-09 16:22:43

C#

2020-11-04 09:46:40

Volodya漏洞惡意軟件

2023-05-08 15:57:16

二叉樹數據結構

2010-09-08 15:13:09

Node節點Node屬性
點贊
收藏

51CTO技術棧公眾號

高清电影在线观看免费| 精品人妻无码一区二区性色| 成人影院网站ww555久久精品| 中文字幕av一区二区三区免费看| 成人亲热视频网站| 欧美黄色免费观看| 最新国产精品视频| 7777精品伊人久久久大香线蕉最新版 | 国产激情片在线观看| 人妻少妇精品无码专区久久| 日日摸夜夜添夜夜添精品视频| 久久久精品电影| 人妻av一区二区| 伦一区二区三区中文字幕v亚洲| 一区二区三区色| 欧美午夜精品久久久久免费视| 国产又粗又猛又爽又黄视频 | 青青在线视频一区二区三区| 国产精品 欧美激情| 一区二区美女| 日韩欧美在线观看一区二区三区| 18禁男女爽爽爽午夜网站免费| 欧美a免费在线| 久久在线观看免费| 99在线影院| 在线观看免费高清视频| 在线综合欧美| 久久国产精彩视频| 精品一区二区三区蜜桃在线| 精品精品精品| 欧美成人女星排名| 免费黄频在线观看| 成人黄色视屏网站| 在线视频国内自拍亚洲视频| 国产精品久久中文字幕| 超碰在线观看免费| 国产精品麻豆久久久| 麻豆成人小视频| 少妇一区二区三区四区| 国产伦精一区二区三区| 国产精品入口尤物| 日韩精品成人免费观看视频| 国内精品亚洲| 这里只有精品视频在线| 波多野结衣 在线| 青青草久久爱| 亚洲黄色av女优在线观看| 日本wwwwwww| 97人人澡人人爽91综合色| 欧美一区二区播放| www.51色.com| 综合中文字幕| 欧美成人精品高清在线播放| 天天久久综合网| 国产精品亚洲一区二区在线观看 | 天天操狠狠操夜夜操| 日本.亚洲电影| 欧美最猛黑人xxxxx猛交| 超碰影院在线观看| 影视一区二区三区| 欧美性猛交一区二区三区精品| 日本三区在线观看| 日韩欧美精品一区二区综合视频| 欧美性视频一区二区三区| www.色偷偷.com| 91伊人久久| 欧美日韩免费高清一区色橹橹 | 成人免费视频app| 国产一区二区三区无遮挡 | 免费看黄在线看| 理论不卡电影大全神| 日韩欧美aaa| 亚洲精品怡红院| 亚洲伊人伊成久久人综合网| 91精品国产麻豆国产自产在线| 一区二区三区人妻| 大奶在线精品| 亚洲视频在线观看视频| 极品人妻videosss人妻| 999精品色在线播放| 欧美成人精品在线观看| 日本少妇激情舌吻| 亚洲尤物在线| 国产在线精品成人一区二区三区| 国产成人久久精品77777综合 | 99久久99久久精品免费看小说.| 欧美中文一区二区| 久久国产精品久久精品| av资源免费观看| 男女男精品网站| 97av自拍| 高h视频在线| 一区二区在线免费| 一本大道熟女人妻中文字幕在线| 欧洲亚洲精品| 亚洲风情亚aⅴ在线发布| 一级黄色性视频| 亚洲影视一区二区三区| 欧美在线视频观看免费网站| 亚洲手机在线观看| 成人激情综合网站| 亚洲激情图片| 草草在线观看| 91麻豆精品国产自产在线观看一区 | 污片在线免费看| 国产日韩三级| 久久久av免费| 无码人妻丰满熟妇奶水区码| 国产乱码精品一区二区三区五月婷| 久久久免费看| 91精选在线| 欧美午夜精品一区| 黄色免费看视频| 亚洲国产精品久久久天堂| 欧美亚洲另类视频| 国产免费一区二区三区免费视频| 91丨porny丨中文| 嫩草影院中文字幕| 久久影视精品| 亚洲欧美另类自拍| 久久视频免费看| 国产在线精品一区在线观看麻豆| 久久亚洲午夜电影| 日本性爱视频在线观看| 欧美日韩精品免费观看视频| 少妇真人直播免费视频| 黄色国产精品| 99精彩视频| 欧美成人hd| 欧美日韩视频在线第一区 | 国产成人精品日本亚洲专区61| 高h震动喷水双性1v1| 亚洲日本在线视频观看| 中文字幕 91| av一区二区高清| 日韩免费在线播放| 欧美挠脚心网站| 欧美午夜美女看片| 欧洲一级黄色片| 亚洲精品韩国| 九九九九久久久久| 国产在线精彩视频| 欧美精品一区二区三区在线| 久久久久久国产精品免费播放| 国产曰批免费观看久久久| 亚洲精品成人a8198a| 最新日韩一区| 日韩在线观看你懂的| 亚洲一区二区三区高清视频| 国产精品欧美极品| 91女神在线观看| 97在线精品| 亚洲直播在线一区| 先锋成人av| 精品久久久久久久久久久久包黑料| 天天干中文字幕| 国产999精品久久| 成人在线国产视频| 日本天堂一区| 热久久这里只有| 91高清在线视频| 91精品欧美一区二区三区综合在| 欧美丰满熟妇bbbbbb| 国产精品一区二区三区网站| 精品一区二区三区无码视频| 麻豆一区一区三区四区| 日本一区二区在线免费播放| 国产高清自拍视频在线观看| 欧美男女性生活在线直播观看| 亚洲少妇xxx| 国产a精品视频| 男人日女人逼逼| 国产传媒欧美日韩成人精品大片| 国产精品吴梦梦| 综合久久2o19| 日韩精品中文字幕在线播放| 进去里视频在线观看| 亚洲欧美色图小说| 国产极品一区二区| 免费av网站大全久久| 丰满人妻一区二区三区53号| 久久电影在线| 国产精品一区二区三区免费视频| 69xxx在线| 国产午夜精品理论片a级探花| 亚洲视屏在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品久久久久久亚洲av| 日韩和的一区二区| 超碰97在线看| 久久最新网址| 97人摸人人澡人人人超一碰| 韩国成人动漫| 九九久久国产精品| 欧美美乳在线| 精品国产乱码久久久久久浪潮 | 国产精品888| 欧美视频免费播放| 欧美激情视频一区二区三区免费| 免费av在线一区二区| 看亚洲a级一级毛片| 日本视频久久久| 日本无删减在线| 中文字幕在线观看日韩| 头脑特工队2在线播放| 欧美久久久久久蜜桃| 日产精品久久久久| 国产精品久久久久久久久免费相片 | www.欧美免费| 奇米影视888狠狠狠777不卡| 日韩欧美在线不卡| 怡红院男人天堂| 高跟丝袜欧美一区| 久久成人在线观看| 中文字幕一区二区三区视频| 成人午夜剧场视频网站| 丰满放荡岳乱妇91ww| 香蕉视频999| 免费在线欧美视频| 红桃av在线播放| 99国产精品自拍| 日韩一区二区高清视频| 91综合视频| 亚洲成人自拍视频| 综合亚洲自拍| 久久久久久九九| 激情小说一区| 国产精品久久精品视| 精品国产麻豆| 91精品视频播放| 黑人一区二区三区| 国产精品 欧美在线| 黄色在线网站噜噜噜| 欧美精品www在线观看| 国产人成网在线播放va免费| 在线视频中文亚洲| 成人午夜在线观看视频| 亚洲欧美日韩在线一区| 亚洲人成色777777老人头| 亚洲黄页网在线观看| 免费a级片在线观看| 日韩欧美色电影| 国产黄色大片网站| 日韩欧美国产一区二区在线播放| 国产精品久久婷婷| 欧美绝品在线观看成人午夜影视| 自拍偷拍色综合| 欧美日韩一区二区欧美激情| 丰满熟女人妻一区二区三| 欧美影院一区二区| 成年人晚上看的视频| 91福利在线导航| 黄色一区二区视频| 欧美情侣在线播放| 国产一区二区三区在线观看| 3atv一区二区三区| 91精品人妻一区二区三区果冻| 欧美日韩精品一区二区三区四区 | 久九九久频精品短视频| 日韩免费av在线| 日韩第二十一页| 91传媒视频免费| 精品视频自拍| 日韩久久精品一区二区三区| 日韩国产一区二区三区| 色爽爽爽爽爽爽爽爽| 怡红院精品视频在线观看极品| 欧美 国产 综合| 日韩高清在线电影| 国产成人美女视频| 丁香亚洲综合激情啪啪综合| 无码人妻精品一区二区三区温州| 久久精品欧美日韩| 免费黄色激情视频| 亚洲一区二区三区四区五区黄| av大片免费观看| 欧美日韩国产一级片| 亚洲经典一区二区| 亚洲人成绝费网站色www| 日本中文字幕电影在线免费观看| 久久久久成人精品| 日韩福利一区| 91手机视频在线观看| 日韩精品欧美大片| 亚洲欧美在线网| 在线免费高清一区二区三区| 91激情视频在线| 高清不卡一区二区| 手机看片日韩av| 夜夜嗨av一区二区三区网页| 国产免费一级视频| 日韩一区二区三区视频| 青青草视频在线观看| 久久香蕉国产线看观看网| 午夜不卡影院| 3d精品h动漫啪啪一区二区| 欧美大片网址| 日日噜噜夜夜狠狠久久丁香五月| 校园春色综合网| 日本少妇一级片| 国产精品福利影院| 青青草免费观看视频| 欧美一区二区三区视频免费| 日韩成人黄色| 欧美黑人巨大xxx极品| 日韩高清不卡| 久久久久免费网| 欧美搞黄网站| 色婷婷.com| 久久精品欧美日韩精品| 日本少妇性高潮| 日韩欧美激情四射| 三区四区在线视频| 国产99久久精品一区二区 夜夜躁日日躁| 色妞ww精品视频7777| 亚洲欧美日产图| 视频一区二区不卡| 538国产视频| 亚洲一区二区综合| 97人人爽人人爽人人爽| 在线丨暗呦小u女国产精品| 在线成人av观看| 国产精品一区二区三区四区五区 | 亚洲综合区在线| 国产露脸无套对白在线播放| 一本久久综合亚洲鲁鲁| 涩涩在线视频| 好吊色欧美一区二区三区视频| 欧美成人一区二免费视频软件| 91丨九色丨蝌蚪| 国产精品麻豆一区二区| 精人妻无码一区二区三区| 亚洲精品国产精品自产a区红杏吧| 日韩精品卡一| 北条麻妃高清一区| 国产综合亚洲精品一区二| 性鲍视频在线观看| 亚洲码国产岛国毛片在线| 国产又粗又猛视频免费| 最好看的2019的中文字幕视频| 另类激情视频| 神马影院午夜我不卡影院| 日韩专区欧美专区| 日本精品久久久久中文| 欧美午夜免费电影| 在线免费看黄网站| 国产欧洲精品视频| 欧美激情黄色片| 五月六月丁香婷婷| 亚洲精品国产精品乱码不99| 精品二区在线观看| 欧美极品xxxx| 欧美精品国产白浆久久久久| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 免费成人深夜夜行网站视频| 国产一区二区三区日韩| 黄色一级视频在线观看| 精品国产凹凸成av人导航| caoporn视频在线| 麻豆91蜜桃| 另类欧美日韩国产在线| 无码黑人精品一区二区| 日韩欧美成人午夜| 91制片在线观看| 欧美三级网色| 久久99国内精品| 黄色一级视频免费| 日韩经典中文字幕| 亚洲第一会所| 狠狠干视频网站| 91在线视频观看| 中文字幕丰满人伦在线| 欧美理论片在线观看| 欧美美女啪啪| 成年网站免费在线观看| 亚洲精品国久久99热| 污污的视频网站在线观看| 国产精品高潮呻吟久久av野狼| 重囗味另类老妇506070| 欧美丰满少妇人妻精品| 欧美精品色综合| 国产丝袜在线观看视频| 欧美久久久久久| 狠狠色丁香婷婷综合| 日本熟妇毛耸耸xxxxxx| 一区二区三区精品99久久| 精品久久亚洲| 99久久激情视频| 亚洲精品第1页| 青青草在线播放| 97se亚洲综合| 男人的j进女人的j一区| 国产精品2020| 日韩中文字幕国产| 欧美影院天天5g天天爽| 三级av免费观看| 欧美日韩国产页| www久久日com| 日本不卡一区二区三区在线观看| 国产精品18久久久久久久网站|