記錄一道前端面試算法題

題目如下:



解:

const arr = [
    {id: 1, pid: 0, title: "首頁"},
    {id: 2, pid: 1, title: "訂單列表"},
    {id: 3, pid: 1, title: "刊登管理"},
    {id: 4, pid: 3, title: "刊登列表"},
    {id: 5, pid: 3, title: "刊登設置"},
    {id: 6, pid: 0, title: "登陸"},
]
// 1、修改數組:
function getList(arry) {
    const data = [];
    function _getParent(list, pid = 1) {
        for(let i=0;i<list.length;i++){
            if(list[i].id === pid){
                parent = list[i];break;
            }
            else{
                if(list[i].children.length>0)
                    _getParent(list[i].children,pid)
            }
        }
        return parent;
    }
    arry.forEach(v => {
        v.children = [];
        if (v.pid === 0) {
            data.push(v);
        } else {
            let parent = _getParent(data,v.pid);
            parent.children.push(v);
        }
    })
    return data;
}
const list = getList(arr);

// 2、實現方法通過輸入id,得到title的數組,例如:getTitle(5)// [ '首頁', '刊登管理', '刊登設置' ]
function getTitles(id){
    function _getTileArr(list, id = 1,titleArr=[]) {

        let parent ={};
        for(let i=0;i<list.length;i++){
            if(list[i].id === id){
                parent = list[i];
                titleArr.push(parent.title);
                break;
            }
            else{
                if(list[i].children.length>0){
                    titleArr.push(list[i].title);
                    _getTileArr(list[i].children,id,titleArr)
                }

            }
        }
        return titleArr;
    }
    return _getTileArr(list,id);
}
const result = getTitles(5);
console.log(result);// [ '首頁', '刊登管理', '刊登設置' ]

最後,可根據自身情況自行優化!
—————END—————
分享結束!喜歡本文的朋友們,歡迎關注公衆號 張培躍,收看更多精彩內容,謝過!!

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