摘要:初始化數(shù)據(jù)輸出結(jié)果轉(zhuǎn)換函數(shù)這個(gè)轉(zhuǎn)換函數(shù)不受數(shù)據(jù)關(guān)系層級(jí)的限制,無(wú)論有多少層關(guān)系,只要一次循環(huán)就能搞定。所有人拿一根線,從他自己的位置開(kāi)始,走到他父親的位置,那么這個(gè)樹(shù)形結(jié)構(gòu)就完成了。只要每個(gè)節(jié)點(diǎn)都做完了,樹(shù)形就出來(lái)了。
初始化數(shù)據(jù)
var data = [ { parentId: 0, id: 1, value: "1" }, { parentId: 3, id: 2, value: "2" }, { parentId: 0, id: 3, value: "3" }, { parentId: 1, id: 4, value: "4" }, { parentId: 1, id: 5, value: "5" } ]
輸出結(jié)果
[ { id:1, value:"1", children:[ {id:4,value:"4",children:[]}, {id:5,value:"5",children:[]} ] },{ id:3, value:"3", children:[ {id:2,value:"2",children:[]} ] } ]
轉(zhuǎn)換函數(shù)
function convertArrayToTree(arr){ let idsMap = {}, result = [], node, parentNode, item, j, leng = arr.length; for(j = 0; j <= leng; j++ ){ item = arr[j]; if(!idsMap["$"+ item.id]){ node = {id: item.id, children: []} idsMap["$"+ item.id] = node; }else{ node = idsMap["$"+ item.id]; } node.value = item.value; if(item.parentId === 0){ result.push(node); }else{ if(!idsMap["$"+ item.parentId]){ parentNode = {id: item.parentId, children: []} idsMap["$"+ item.parentId] = parentNode; }else{ parentNode = idsMap["$"+ item.parentId]; } parentNode.children.push(node); } } return result; }
這個(gè)轉(zhuǎn)換函數(shù)不受數(shù)據(jù)關(guān)系層級(jí)的限制,無(wú)論有多少層關(guān)系,只要一次循環(huán)就能搞定。假如一群人都是爺爺、父親、兒子、孫子的關(guān)系,每個(gè)人只知道自己的位置和他父親的位置。所有人拿一根線,從他自己的位置開(kāi)始,走到他父親的位置,那么這個(gè)樹(shù)形結(jié)構(gòu)就完成了。
在這里,我們用一個(gè) idsMap 比喻這樣的集合,id 作位健值。每個(gè)節(jié)點(diǎn)有自己和他父節(jié)點(diǎn) id,找到父節(jié)點(diǎn),然后把他自己 push 到父節(jié)點(diǎn)的 children 中。
只要每個(gè)節(jié)點(diǎn)都做完了,樹(shù)形就出來(lái)了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102533.html
摘要:解析第題第題為什么的和的中不能做異步操作解析第題第題京東下面代碼中在什么情況下會(huì)打印解析第題第題介紹下及其應(yīng)用。盡量減少操作次數(shù)。解析第題第題京東快手周一算法題之兩數(shù)之和給定一個(gè)整數(shù)數(shù)組和一個(gè)目標(biāo)值,找出數(shù)組中和為目標(biāo)值的兩個(gè)數(shù)。 引言 半年時(shí)間,幾千人參與,精選大廠前端面試高頻 100 題,這就是「壹題」。 在 2019 年 1 月 21 日這天,「壹題」項(xiàng)目正式開(kāi)始,在這之后每個(gè)工...
摘要:之前的項(xiàng)目中使用了什么前端方法對(duì)頁(yè)面性能進(jìn)行優(yōu)化,有什么心得。隨記這是我去咪咕數(shù)媒面試的時(shí)候的筆試題目,因?yàn)檫涔净旧隙际且苿?dòng)端的項(xiàng)目,所以這里的題目比較偏向于移動(dòng)端。 一、不定項(xiàng)選擇題(共25分,每題5分) 1、下列語(yǔ)句中能夠正確的在一個(gè)HTML頁(yè)面中導(dǎo)入在同一目錄下的StyleSheet1.css樣式表的是() ...
摘要:之前的項(xiàng)目中使用了什么前端方法對(duì)頁(yè)面性能進(jìn)行優(yōu)化,有什么心得。隨記這是我去咪咕數(shù)媒面試的時(shí)候的筆試題目,因?yàn)檫涔净旧隙际且苿?dòng)端的項(xiàng)目,所以這里的題目比較偏向于移動(dòng)端。 一、不定項(xiàng)選擇題(共25分,每題5分) 1、下列語(yǔ)句中能夠正確的在一個(gè)HTML頁(yè)面中導(dǎo)入在同一目錄下的StyleSheet1.css樣式表的是() ...
摘要:之前的項(xiàng)目中使用了什么前端方法對(duì)頁(yè)面性能進(jìn)行優(yōu)化,有什么心得。隨記這是我去咪咕數(shù)媒面試的時(shí)候的筆試題目,因?yàn)檫涔净旧隙际且苿?dòng)端的項(xiàng)目,所以這里的題目比較偏向于移動(dòng)端。 一、不定項(xiàng)選擇題(共25分,每題5分) 1、下列語(yǔ)句中能夠正確的在一個(gè)HTML頁(yè)面中導(dǎo)入在同一目錄下的StyleSheet1.css樣式表的是() ...
摘要:后續(xù)前端筆試題面試題記錄下小結(jié)我想說(shuō)的是在找工作期間,肯定有自己發(fā)揮不好,或者不會(huì)的問(wèn)題,一定要在晚上的時(shí)候自己再學(xué)習(xí)總結(jié)一下,在一個(gè)問(wèn)題上面盡量不要栽倒兩次,學(xué)到了的才是自己的。 前言 過(guò)完元宵,就到上海找了波工作,現(xiàn)在已經(jīng)入職好了,蹭波熱點(diǎn),寫一波面試記錄,內(nèi)容包含筆試題和面試題,還有一些沒(méi)有寫進(jìn)來(lái),準(zhǔn)備再開(kāi)一篇,許久沒(méi)寫了,寫的確實(shí)有些慢。如果喜歡的話可以點(diǎn)波贊,或者關(guān)注一下,希...
閱讀 1972·2021-10-25 09:48
閱讀 2801·2021-09-22 14:59
閱讀 1763·2019-08-29 16:52
閱讀 870·2019-08-29 16:07
閱讀 2311·2019-08-29 12:38
閱讀 1766·2019-08-26 13:23
閱讀 886·2019-08-26 11:49
閱讀 3282·2019-08-26 10:56