gpt4 book ai didi

javascript - 递归遍历一个json对象 Results in "uncaught syntaxError: Illegal return statement"

转载 作者:行者123 更新时间:2023-11-29 15:34:02 25 4
gpt4 key购买 nike

我第一次尝试以递归方式浏览 JSON 对象,在调试器中运行的代码似乎正常工作,直到它在我找到我要查找的 groupId 时尝试返回该对象。这是我收到的错误:

Uncaught SyntaxError: Illegal return statement
at Object.InjectedScript._evaluateOn (<anonymous>:895:55)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluateOnCallFrame (<anonymous>:954:21)
at findGroupId (http://s.codepen.io/boomerang/5978872e6c1baaa184d2e8ced60239201437139491273/index.html?editors=001:503:21)
at findGroupId (http://s.codepen.io/boomerang/5978872e6c1baaa184d2e8ced60239201437139491273/index.html?editors=001:491:32)
at findGroupId (http://s.codepen.io/boomerang/5978872e6c1baaa184d2e8ced60239201437139491273/index.html?editors=001:491:32)
at findGroupId (http://s.codepen.io/boomerang/5978872e6c1baaa184d2e8ced60239201437139491273/index.html?editors=001:491:32)
at findGroupId (http://s.codepen.io/boomerang/5978872e6c1baaa184d2e8ced60239201437139491273/index.html?editors=001:491:32)
at findGroupId (http://s.codepen.io/boomerang/5978872e6c1baaa184d2e8ced60239201437139491273/index.html?editors=001:491:32)
at findGroupId (http://s.codepen.io/boomerang/5978872e6c1baaa184d2e8ced60239201437139491273/index.html?editors=001:491:32)

请随意批评其中的任何部分,因为这是我第一次尝试这样做。 :)

我的示例代码如下:

'use strict';

var findGroupId = function (obj, id) {
var checkForId = function (key, obj) {
if (key == id) {
return true;
}
return false;
};
if (typeof obj === 'object') {
for (var i in obj) {
if (typeof obj[i] === 'object') {
findGroupId(obj[i], id);
} else if (Array.isArray(obj[i])) {
for (var x = 0 ; x <= obj[i].length ; x++) {
findGroupId(obj[i], id);
}
} else {
var result = checkForId(obj[i], obj);
if (result) {
debugger;
return obj;
}
}
}
}

};
var result = findGroupId(obj, "37078;1");
console.log(result);

这是一个可执行的例子: http://codepen.io/eaglejs/pen/vOaZgd

感谢 Pablo,这是固定的解决方案: http://codepen.io/eaglejs/pen/QbBKGK

最佳答案

这里的问题是您实际上并没有返回任何东西,您必须从代码中的所有函数调用中返回一些东西。

最简单的解决方法是存储结果并在其未定义时返回它。

function checkForId(key, obj, id) {
if (key == id) {
return true;
}
return false;
}
var findGroupId = function (obj, id) {
if (typeof obj === 'object') {
for (var i in obj) {
if (typeof obj[i] === 'object') {
var myresult = findGroupId(obj[i], id);
if (myresult)
return myresult;
} else if (Array.isArray(obj[i])) {
for (var x = 0; x <= obj[i].length; x++) {
var myresult = findGroupId(obj[i], id);
if (myresult)
return myresult;
}
} else {
var result = checkForId(obj[i], obj, id);
if (result) {
return obj;
}
}
}
}
};

有效的修改后的codepen

请注意,我还对 findGroupId 进行了一些改进,删除了 checkForId 并将其置于“循环”之外,否则您将一遍又一遍地重新定义它。

http://codepen.io/anon/pen/aOjwYW?editors=001

关于javascript - 递归遍历一个json对象 Results in "uncaught syntaxError: Illegal return statement",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477798/

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