记录一道前端面试算法题
程序员文章站
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—————
分享结束!喜欢本文的朋友们,欢迎关注公众号 张培跃,收看更多精彩内容,谢过!!
上一篇: Leecode 的一道算法题,记录一下
下一篇: [CISCN2020]-Funhash