gpt4 book ai didi

javascript - jQuery 递归地遍历对象数组并返回一个值

转载 作者:行者123 更新时间:2023-11-28 06:00:36 25 4
gpt4 key购买 nike

我有以下 json,它表示网站上的页面,这些页面通过项目数组具有子页面,当前包含 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 才能跳出每个循环,但不确定为什么当我尝试递归使用该函数时它不起作用。

最佳答案

您可以使用Array#some() ,因为如果满足条件,就会停止迭代。

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":[]}]}]';

function check(slug, data) {
function iter(a, i) {
if (a.slug === slug || Array.isArray(a.items) && a.items.some(iter)) {
index = i;
return true;
}
}

var index,
array = JSON.parse(data);

array.some(iter)
return index;
}

document.write(check('about', data) + '<br>');
document.write(check('services', data) + '<br>');
document.write(check('services-sub-page', data) + '<br>');

关于javascript - jQuery 递归地遍历对象数组并返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com