今天在写一个层级菜单选中高亮的逻辑的时候,无意看到“尾递归”这个概念。看了阮老师的 一篇文章 感觉很好理解,但是当我尝试去把我的递归逻辑进行修改时,感觉无从下手,请大佬指导一下 O.O
下面的代码在 codepen 上也放了个方便看些 求助,如何优化递归
let menuList = [
{
path: '/A',
selected: true
},
{
path: '/B',
selected: false,
children: [
{
path: '/B/B-1',
selected: false
}
]
},
{
path: '/C',
selected: false,
children: [
{
path: '/C/C-1',
selected: false
},
{
path: '/C/C-2',
selected: false,
children: [
{
path: '/C/C-2/C-2-1',
selected: false
}
]
}
]
}
];
function checkSelected(path) {
menuList = recursive(menuList, path);
function recursive(list, path) {
return list.map(item => {
if (item.children && item.children.length) {
item.children = recursive(item.children, path);
}
return {
...item,
selected: path.includes(item.path)
};
});
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.