我有一个嵌套对象数组。它们表示类似文件夹的路径或带有子导航的菜单。
结构如下:
const MENU:Menu[] = [
{
value: 'Home',
nested: [
{ value: 'home-1', url: 'home-1' },
{ value: 'home-2', url: 'home-2' },
],
},
{
value: 'about',
nested: [
{
value: 'about-1',
url: 'about-1',
},
{
value: 'about-2',
url: 'about-2',
},
],
},
];对于给定的url,我希望使用值属性返回路径。
例如,对于home-1 => ['Home','home-1']
about-2 => ['about','about-2']
此菜单的接口是
interface Menu {
value: string;
nested?: Menu[];
url?: string;
}这就是我试过的
function getPath(url, menu = MENU, navTreePath = []) {
for (let i = 0; i < menu.length; i++) {
const currentMenu = menu[i];
if (currentMenu.url === url) {
navTreePath.push(currentMenu.value);
return navTreePath;
} else if (currentMenu.nested) {
navTreePath.push(currentMenu.value);
return getNavTreePathFromUrl(url, currentMenu.nested, []);
} else {
}
}
}还有那个电话
const path = getPath('about-2');发布于 2020-09-29 07:14:04
您需要递归算法来爬行整个深度:
const menu = [
{
value: 'Home',
nested: [
{ value: 'home-1', url: 'home-1' },
{ value: 'home-2', url: 'home-2' },
],
},
{
value: 'about',
nested: [
{
value: 'about-1',
url: 'about-1',
},
{
value: 'about-2',
url: 'about-2',
nested: [
{
value: 'detailed about',
url: 'detailedAbout'
}
]
},
],
},
],
getPath = (tree, needle, path=[]) =>
tree.reduce((acc, {url, value, nested=[]}) => {
if(url == needle){
acc.push(...path, value)
} else if (!!nested.length) {
acc.push(...getPath(nested, needle, [...path, value]))
}
return acc
}, [])
console.log(getPath(menu, 'detailedAbout'))
https://stackoverflow.com/questions/64114191
复制相似问题