首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从嵌套对象数组返回类似文件夹的路径。

从嵌套对象数组返回类似文件夹的路径。
EN

Stack Overflow用户
提问于 2020-09-29 06:41:17
回答 1查看 70关注 0票数 1

我有一个嵌套对象数组。它们表示类似文件夹的路径或带有子导航的菜单。

结构如下:

代码语言:javascript
复制
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']

此菜单的接口是

代码语言:javascript
复制
interface Menu {
  value: string;
  nested?: Menu[];
  url?: string;
}

这就是我试过的

代码语言:javascript
复制
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 {
    }
  }
}

还有那个电话

代码语言:javascript
复制
const path = getPath('about-2');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-29 07:14:04

您需要递归算法来爬行整个深度:

代码语言:javascript
复制
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'))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64114191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档