Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归遍历json对象会导致;未捕获的syntaxError:非法返回声明”;_Javascript_Json_Recursion_Traversal - Fatal编程技术网

Javascript 递归遍历json对象会导致;未捕获的syntaxError:非法返回声明”;

Javascript 递归遍历json对象会导致;未捕获的syntaxError:非法返回声明”;,javascript,json,recursion,traversal,Javascript,Json,Recursion,Traversal,我第一次尝试递归地浏览JSON对象,在调试器中运行时,代码似乎一直在运行,直到我找到要查找的groupId时,它尝试返回该对象。这就是我得到的错误: Uncaught SyntaxError: Illegal return statement at Object.InjectedScript._evaluateOn (<anonymous>:895:55) at Object.InjectedScript._evaluateAndWrap (<anonymous

我第一次尝试递归地浏览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)
Uncaught SyntaxError:非法返回语句
在Object.InjectedScript.\u evaluateOn(

这是多亏了Pablo的固定解决方案:

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

最简单的修复方法是存储结果,如果结果未定义,则返回结果

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;
                }
            }
        }
    }
};
功能检查id(键、对象、id){
if(key==id){
返回true;
}
返回false;
}
var findGroupId=函数(obj,id){
如果(对象的类型=='object'){
用于(obj中的var i){
如果(对象类型[i]=“对象”){
var myresult=findGroupId(obj[i],id);
如果(我的结果)
返回我的结果;
}else if(Array.isArray(obj[i])){

对于(var x=0;x)在您的实际环境中,您是否将其作为承诺来处理?我认为异步可能会在这里咬到您的尾巴。在我的环境中,它不是承诺,它只是作为我的集合(主干)中的一个方法编写的.我一直被教导异步编码,我甚至不知道如何同步编码哈哈。我应该使用try/catch或类似的方法吗?:)我在调试器中放置了一个调试器,您可以调用“return obj”在控制台中,您将看到错误。即使使用“use strict”,它也会无声地失败。非常感谢!这就是问题所在!我知道这与向每个函数调用添加返回有关!我不知道我需要将checkForId函数移到findGroupId之外。谢谢!:实际上,您不必将它移到外面,而是这只是我做的一点优化。主要问题是你只是调用函数,而不是在这里返回结果:
for(var x=0;x再次感谢您!我学到了很多!我将保留此代码笔,以便人们可以看到它。我创建了另一个代码笔,显示了此处找到的正确解决方案:我还编辑了原始帖子,以便人们可以更容易地找到它。
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;
                }
            }
        }
    }
};