【问题标题】:Get path of value in object from nested array从嵌套数组中获取对象中的值路径
【发布时间】:2021-02-24 06:11:55
【问题描述】:

如何在这个嵌套数组中获取嵌套值的路径:

const categories = [
    {
        name: 'category1',
        subcategories: [
            {
                name: 'category2',
                subcategories: [],
            },
            {
                name: 'category3',
                subcategories: [
                    {
                        name: 'category4',
                        subcategories: [],
                    },
                ],
            },
        ],
    },
    {
        name: 'category5',
        subcategories: [],
    },
];

我需要实现一个返回如下内容的函数:

console.log(getCategoryPath(categories, 'category4')); // 应该输出:'/category1/category3/category4'

到目前为止,我得到了:

const getCategoryPath() = (categories, categoryName) {
    if (category.name === categoryName) {
        path = `/${category.name}`;
    } else {
        category.subcategories.find((firstLevelSubcategory) => {
            if (firstLevelSubcategory.name === categoryName) {
                path = `/${firstLevelSubcategory.name}`;
            } else {
                firstLevelSubcategory.subcategories.find(
                    (secondLevelSubcategory) => {
                        if (secondLevelSubcategory.name === categoryName) {
                            path = `/${secondLevelSubcategory.name}`;
                        }
                    }
                );
            }
        });
    }
}

例如,这会打印匹配的类别名称 /category4,但我需要打印该值 /category1/category3/category4 的整个路径。

在这种情况下,我无法识别匹配的categoryName 的父母/父母。我可以对这个问题使用递归吗?如果可以,我该如何应用它?

【问题讨论】:

    标签: javascript arrays recursion path


    【解决方案1】:

    你可以应用递归:

    const categories = [ { name: 'category1', subcategories: [ { name: 'category2', subcategories: [], }, { name: 'category3', subcategories: [ { name: 'category4', subcategories: [], }, ], }, ], }, { name: 'category5', subcategories: [], },];
    
    const getNestedPath=(arr,name)=>{
        for(let item of arr){
            if(item.name===name) return `/${name}`;
            if(item.subcategories) {
                const child = getNestedPath(item.subcategories, name);
                if(child) return `/${item.name}${child}`
            }
        }
    };
    
    console.log(getNestedPath(categories, 'category4'));

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 2013-10-11
      • 1970-01-01
      • 2020-05-10
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 2021-11-27
      相关资源
      最近更新 更多