JavaScript 數(shù)組轉(zhuǎn)樹狀結(jié)構(gòu)

數(shù)據(jù)如下

var data = [
        {id: 1,  parentId: 0, name: '第一級菜單A' },
        {id: 2,  parentId: 0, name: '第一級菜單B' },
        {id: 3,  parentId: 1, name: '第二級菜單A' },
        {id: 4,  parentId: 1, name: '第二級菜單B' },
        {id: 5,  parentId: 3, name: '第三級菜單A' },
        {id: 6,  parentId: 3, name: '第三級菜單B' },
        {id: 7,  parentId: 4, name: '第三級菜單C' },
        {id: 8,  parentId: 4, name: '第三級菜單D' },
        {id: 9,  parentId: 2, name: '第二級菜單C' },
        {id: 10, parentId: 2, name: '第二級菜單D' },
        {id: 11, parentId: 2, name: '第二級菜單E' }
    ]

需要轉(zhuǎn)換的結(jié)果


代碼如下

function array2tree(arr){
        var top = [], sub = [], tempObj = {};

        arr.forEach(function(item){
            if(item.parentId === 0){ // 頂級分類
                top.push(item)
            }else{
                sub.push(item) // 其他分類
            }
            item.children = []; // 默然添加children屬性
            tempObj[item.id] = item // 用當(dāng)前分類的id做key,存儲在tempObj中
        })

        sub.forEach(function (item) {
            // 取父級
            var parent = tempObj[item.parentId] || {'children': []}
            // 把當(dāng)前分類加入到父級的children中
            parent.children.push(item)
        })

        return top
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,503評論 0 13
  • 生活中流傳著這樣一種說法:愛養(yǎng)花的的女人,必是懂得生活的女人,必是有情調(diào)的女人,必是耐得住寂寞的女人,必是善解人意...
    劍南詩雪閱讀 6,993評論 6 9
  • 曾在“十點(diǎn)讀書”上讀到過一篇文章,題目是“閨女,別嫁得太遠(yuǎn)了”,我當(dāng)時頗不以為然。我甚至還過想寫一篇“閨女,你嫁多...
    星滿池閱讀 566評論 4 51
  • 【壹】 心靈雞湯本身是個舶來語,也以為只有國外才有這種鼓勵人贊揚(yáng)人的故事,今天看通鑒,發(fā)現(xiàn)里面居然也有雞湯呢,故事...
    蘇三州閱讀 278評論 1 2
  • 佛家有云:悟便悟了,沒悟就是沒悟。 我悟了,確實(shí)悟了,可還是沒成,為何 動力,沒動力,搖頭哭笑,為何 自已明白,懶啊…
    隨心居閱讀 443評論 0 0

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