gpt4 book ai didi

javascript - 递归函数调用返回

转载 作者:行者123 更新时间:2023-12-02 15:39:09 25 4
gpt4 key购买 nike

我正在递归地迭代可能无限嵌套的 JSON。

这是我用来执行此操作的函数:

  function iterate(obj,matchId) {
for(var key in obj) {
var elem = obj[key];

if(obj.id == matchId) { //if objects id matches the arg I return it
console.log(obj); // matched obj is always logged
return(obj);
}

if(typeof elem === "object") { // is an object (plain object or array),
// so contains children
iterate(elem,matchId); // call recursively
}
}
}

我就是这样调用它的:

var matchedObj = iterate(json,3);

但是,matchedObj 获取的值undefined,因为返回值通常来自于自身内部调用 iterate(),而不是直接由 >var matchesObj = iterate(json,3);

<小时/>

我现在能看到的唯一方法是使用递归函数中的回调来执行我想做的任何操作。还有其他我失踪的方式吗?

<小时/>

无论如何,这是我的 JSON:

var json =  [

{
"id": 1,
"text": "Boeing",
"children": [
{
"id": 2,
"text": "747-300",
"json": "737 JSON"
},
{
"id": 3,
"text": "737-400",
"json": "737 JSON"
}
]
},
{
"id": 4,
"text": "Airbus",
"children": [
{
"id": 5,
"text": "A320",
"json": "A320 JSON"
},
{
"id": 6,
"text": "A380",
"json": "A380 JSON"
}
]
}

]

最佳答案

如果找到结果,您只需返回递归调用即可。

function iterate(obj,matchId) {
for(var key in obj) {
var elem = obj[key];

if(obj.id == matchId) { //if objects id matches the arg I return it
console.log(obj); // matched obj is always logged
return(obj);
}

if(typeof elem === "object") { // is an object (plain object or array),
// so contains children
var res = iterate(elem,matchId); // call recursively
if (res !== undefined) {
return res;
}
}
}
}

关于javascript - 递归函数调用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32708607/

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