js將數據轉爲菜單,一個for?

let data = [


    { id: '02', lable: '產品leader', pid: '01' },

    { id: '03', lable: 'UIleader', pid: '01' },
    { id: '07', lable: '產品經理', pid: '02' },

    { id: '04', lable: '技術leader', pid: '01' },
    { id: '21', lable: '技術leader2', pid: '20' },
    { id: '05', lable: '測試leader', pid: '01' },

    { id: '06', lable: '運維leader', pid: '01' },


    { id: '08', lable: '產品經理', pid: '02' },

    { id: '09', lable: 'UI設計師', pid: '03' },

    { id: '10', lable: '前端工程師', pid: '04' },

    { id: '11', lable: '後端工程師', pid: '04' },

    { id: '12', lable: '後端工程師', pid: '04' },

    { id: '13', lable: '測試工程師', pid: '05' },

    { id: '14', lable: '測試工程師', pid: '05' },

    { id: '15', lable: '運維工程師', pid: '06' },

    { id: '01', lable: '項目經理', pid: '' },
    { id: '20', lable: '項目經理22', pid: '' },

]
data.sort(_ => Math.random() - 0.5) //亂序

/**
* 利用淺拷貝
*/
function toData2(arr) { let obj = {}, result = []; for (let index = 0; index < arr.length; index++) { const element = arr[index]; if (!obj[element.id]) { obj[element.id] = element obj[element.id].children = [] } if (element.pid && !obj[element.pid]) { obj[element.pid] = { children: [] } } if (!element.pid) { element.children = obj[element.id].children result.push(element) } else { obj[element.pid].children.push(element) } } return result } function toData3(arr) { let obj = {}, result = []; arr.forEach(element => { if (!obj[element.id]) { obj[element.id] = element obj[element.id].children = [] } if (element.pid && !obj[element.pid]) { obj[element.pid] = { children: [] } } if (!element.pid) { element.children = obj[element.id].children result.push(element) } else { obj[element.pid].children.push(element) } }) return result } console.time('toData2') console.log(JSON.stringify(toData2(data))) console.timeEnd('toData2') console.time('toData3') console.log(JSON.stringify(toData3(data))) console.timeEnd('toData3')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章