【发布时间】:2014-09-09 18:08:34
【问题描述】:
我有一个非常深的嵌套类别结构,我得到了一个可以存在于任何深度的类别对象。我需要能够遍历所有类别节点,直到找到请求的类别,并且能够一直捕获其父类别。
数据结构
[
{
CategoryName: 'Antiques'
},
{
CategoryName: 'Art',
children: [
{
CategoryName: 'Digital',
children: [
{
CategoryName: 'Nesting..'
}
]
},
{
CategoryName: 'Print'
}
]
},
{
CategoryName: 'Baby',
children: [
{
CategoryName: 'Toys'
},
{
CategoryName: 'Safety',
children: [
{
CategoryName: 'Gates'
}
]
}
]
},
{
CategoryName: 'Books'
}
]
当前代码
function findCategoryParent (categories, category, result) {
// Iterate through our categories...initially passes in the root categories
for (var i = 0; i < categories.length; i++) {
// Check if our current category is the one we are looking for
if(categories[i] != category){
if(!categories[i].children)
continue;
// We want to store each ancestor in this result array
var result = result || [];
result.push(categories[i]);
// Since we want to return data, we need to return our recursion
return findCategoryParent(categories[i].children, category, result);
}else{
// In case user clicks a parent category and it doesnt hit above logic
if(categories[i].CategoryLevel == 1)
result = [];
// Woohoo...we found it
result.push(categories[i]);
return result;
}
}
}
问题
-
1234563 /em> 住在 Baby/Safety/Gates
如果我不返回递归函数,它只能返回根级节点
如果有任何建议或建议,我们将不胜感激。
【问题讨论】:
-
对我来说听起来像是深度优先搜索。
-
写一个 ES6 生成器。
-
categories.filter(function(a){return JSON.stringify(a).match('"CategoryName":"Baby"')});根据需要调整其他猫的名字
-
@dandavis 我相信这个问题的一个问题是类别名称“Baby”实际上可以存在多个地方......这就是为什么我有参考类别对象并且需要知道从哪个实例来了
-
你需要更清楚地说明你想从比赛中走多远。
标签: javascript recursion