jmk*_*142 10 javascript algorithm underscore.js
我正在使用一组类别对象,这些对象可以有一个子类别对象数组.棘手的部分是这个嵌套数据的深度是未知的(并且可以改变).(请参阅底部的示例.)我要做的是返回类别对象的"踪迹",但我遇到各种各样的困难.
理想情况下findCategory('b4')
会返回:( ['c1', 'd2', 'd3', 'b4']
见样本).
我认为我的问题是我在正确分解由递归引起的嵌套循环方面遇到了麻烦.有时我会在我的踪迹中获得额外的类别,或者当我认为我已经爆发时,一些更深层次的嵌套类别最终会出现在路径中.
一个结果可能看起来像这样.显然它不会在b4处杀死循环,我不确定为什么结果被发现两次.
b4
FOUND
["c1", "d2", "d3", "b4"]
e2
FOUND
["c1", "d2", "d3", "b4", "e2"]
Run Code Online (Sandbox Code Playgroud)
如果你还可以给我看一个underscore.js版本的奖金.
JSFiddle链接在这里......
// 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'));
Run Code Online (Sandbox Code Playgroud)
例如,数组类别对象,具有类别对象的嵌套数组.假设嵌套深度未知.
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:[]
}
]
}
]
}
];
Run Code Online (Sandbox Code Playgroud)
Aru*_*hny 21
尝试
function findCategory(categoryName) {
var trail = [];
var found = false;
function recurse(categoryAry) {
for (var i = 0; i < categoryAry.length; i++) {
trail.push(categoryAry[i].category);
// Found the category!
if ((categoryAry[i].category === categoryName)) {
found = true;
break;
// Did not match...
} else {
// Are there children / sub-categories? YES
if (categoryAry[i].children.length > 0) {
recurse(categoryAry[i].children);
if(found){
break;
}
}
}
trail.pop();
}
}
recurse(catalog);
return trail
}
Run Code Online (Sandbox Code Playgroud)
演示:小提琴
归档时间: |
|
查看次数: |
20660 次 |
最近记录: |