首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归遍历json对象将生成"uncaught :非法返回语句“

递归遍历json对象将生成"uncaught :非法返回语句“
EN

Stack Overflow用户
提问于 2015-07-17 14:09:26
回答 1查看 195关注 0票数 3

我第一次尝试递归地在JSON对象中导航,当运行调试器时,代码似乎工作正常,直到当我找到正在寻找的groupId时,它才试图返回该对象。这是我正在犯的错误:

代码语言:javascript
复制
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)

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

我的示例代码如下:

代码语言:javascript
复制
'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的固定解决方案

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-17 14:41:06

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

最简单的修复方法是存储结果,并在未定义的情况下返回结果。

代码语言:javascript
复制
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;
                }
            }
        }
    }
};

修改后的代码

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31477798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档