我正在使用一个类别对象数组,其中包含一个子类别对象的数组。问题在于这个嵌套数据的深度未知(并且可能会改变)。 (请参见底部示例。)我的目标是返回到类别对象的“路径”,但我遇到了各种困难。
理想情况下,像findCategory('b4')
这样的东西将返回:['c1','d2','d3','b4']
(请参见示例)。
我认为我的问题是我在处理递归引起的嵌套循环时遇到了麻烦。有时我的路径中会有额外的类别,或者当我认为我已经跳出循环时,一些更深层次的嵌套类别会出现在路径中。
结果可能看起来像这样。显然,它没有在b4处结束循环,而且我不确定为什么结果被找到两次。
b4
FOUND
["c1", "d2", "d3", "b4"]
e2
FOUND
["c1", "d2", "d3", "b4", "e2"]
如果您能展示一个underscore.js版本,将会有额外的奖励。
// Start function
function findCategory(categoryName) {
var trail = [];
var found = false;
function recurse(categoryAry) {
for (var i=0; i < categoryAry.length; i++) {
console.log(categoryAry[i].category);
trail.push(categoryAry[i].category);
// Found the category!
if ((categoryAry[i].category === categoryName) || found) {
console.log('FOUND');
found = true;
console.log(trail);
break;
// Did not match...
} else {
// Are there children / sub-categories? YES
if (categoryAry[i].children.length > 0) {
console.log('recurse');
recurse(categoryAry[i].children);
// NO
} else {
trail.pop();
if (i === categoryAry.length - 1) {
trail.pop();
}
}
}
}
}
return recurse(catalog);
}
console.clear();
console.log(findCategory('b4'));
例如,数组类别对象,带有嵌套的类别对象数组。假设嵌套深度未知。
var catalog = [
{
category:"a1",
children:[
{
category:"a2",
children:[]
},
{
category:"b2",
children:[
{
category:"a3",
children:[]
},
{
category:"b3",
children:[]
}
]
},
{
category:"c2",
children:[]
}
]
},
{
category:"b1",
children:[]
},
{
category:"c1",
children:[
{
category:"d2",
children:[
{
category:"c3",
children:[]
},
{
category:"d3",
children:[
{
category:"a4",
children:[]
},
{
category:"b4",
children:[]
},
{
category:"c4",
children:[]
},
{
category:"d4",
children:[]
}
]
}
]
},
{
category:"e2",
children:[
{
category:"e3",
children:[]
}
]
}
]
}
];
break;
替换为return;
吗? - jmk2142break;
更改为return;
似乎并没有改变输出结果。我的头真的很疼。;-) - jmk2142