I持って現在2つのトップレベルの項目含む項目アレイを介してサブページ持ってサイト上のページを表し、次のJSON - 約やサービスについて:jQueryの再帰的オブジェクトの配列を反復処理し、値を返す
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'スラッグを使用すると、about-sub-pageと同様に0が返されます。同様に、「サービス・サブページが」1
を返します私は、現時点ではこれを持っている:私は、しかし、トップレベルのスラグ例えば
var index = check('about',data);
console.log(index); // returns 0
var index = check('services',data);
console.log(index); // returns 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;
}
これは正常に動作します私は、サブページにしようと、私は、
var index = check('services-sub-page',data);
console.log(index); // returns undefined
は私が各ループから抜け出すためにはfalseを返す必要があると考えてい未定義取得します私はしようとすると、再帰的に関数を使用していない理由を確認していない。
は、あなたが何をすべき '結果=チェック(スラグ、this.items);'、それは(そのelse節がヒットします)サブアイテムになるとそうでない場合、あなたは間違いなく、未定義戻ってきているので。 – James
こんにちはジェームス、これを試しました - まだ未定義になっていますか? – Newfoundland