【发布时间】:2016-05-19 00:53:50
【问题描述】:
我有以下 json 表示网站上的页面,这些页面通过 items 数组具有子页面,该数组当前包含 2 个顶级项目 - 关于和服务:
var data = '[{"id":107,"name":"About Us","route":"page","slug":"about","parent":0,"module":1,"items":[{"id":118,"name":"About Sub Page","route":"page","slug":"about-sub-page","parent":107,"items":[]}]},{"id":129,"name":"Services","route":"page","slug":"services","parent":0,"module":1,"items":[{"id":174,"name":"Services sub page","route":"page","slug":"services-sub-page","parent":129,"items":[]}]}]';
我正在尝试编写一个函数,它递归地遍历对象数组(data = JSON.parse(data))并识别顶级项目的索引。例如,在我的函数中,如果我使用“about”slug,它将返回 0,“about-sub-page”也将返回 0。同样,“services-sub-page”将返回 1。
我现在有这个:
data = JSON.parse(data);
function check(slug,data) {
var result;
$.each(data, function(index){
if (this.slug === slug) {
result = index;
return false;
}
else {
check(slug,this.items);
}
});
return result;
}
如果我通过一个顶级的 slug,这很好用,例如
var index = check('about',data);
console.log(index); // returns 0
var index = check('services',data);
console.log(index); // returns 1
但是,如果我尝试使用子页面,我会得到未定义
var index = check('services-sub-page',data);
console.log(index); // returns undefined
我相信我需要返回 false 以跳出每个循环,但不确定为什么当我尝试递归使用该函数时它不起作用。
【问题讨论】:
-
你应该这样做
result = check(slug, this.items);,否则当它落入子项时你肯定会返回未定义(那个 else 子句被击中)。 -
嗨,詹姆斯,试过这个 - 仍然不确定?
标签: javascript jquery arrays recursion