欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记录一道前端面试算法题

程序员文章站 2022-05-12 14:01:41
...

题目如下:
记录一道前端面试算法题
解:

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—————
分享结束!喜欢本文的朋友们,欢迎关注公众号 张培跃,收看更多精彩内容,谢过!!