#javascript #arrays #recursion #path
#javascript #массивы #рекурсия #путь
Вопрос:
Как я могу получить путь к вложенному значению внутри этого вложенного массива:
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
. Могу ли я использовать рекурсию для решения этой проблемы, и если да, то как я могу ее применить?
Ответ №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'));