javascript - 递归函数无法正常工作

标签 javascript jquery recursion

我有一个递归函数,它应该循环遍历 json 对象并输出表达式。但是,我的回避似乎已关闭,因为它在输出 field1 != '' AND field3 == '' 时应该输出 field1 != '' AND field2 == '' AND field3 == ''

我已经尝试了几个不同的东西,唯一能让它工作的方法是创建一个全局变量 outstring 而不是将它传递给函数。我在哪里?当我单步执行它时,我看到了一个正确的结果,但是一旦堆栈反转,它就会开始重置 outstring,然后再次将其堆叠起来,但会遗漏中间部分 (field2)。

JSFiddle

function buildString(json, outstring) {
        var andor = json.condition;
    for (var rule in json.rules) {
        if (json.rules[rule].hasOwnProperty("condition")) {
            buildString(json.rules[rule], outstring);
        } else {
            var field = json.rules[rule].id;
            var operator = json.rules[rule].operator;
            var value = json.rules[rule].value == null ? '' : json.rules[rule].value;
            outstring += field + ' ' + operator + ' ' + value;
            if (rule < json.rules.length - 1) {
                outstring += ' ' + andor + ' ';
            }
        }
    }
    return outstring;
}

var jsonObj = {"condition":"AND","rules":[{"id":"field1","operator":"!= ''","value":null},{"condition":"AND","rules":[{"id":"field2","operator":"== ''","value":null}]},{"id":"field3","operator":"== ''","value":null}]};

$('#mydiv').text(buildString(jsonObj, ""));

最佳答案

该函数返回一个字符串。

当您从函数自身内部递归调用函数时,您不会对该实例返回的字符串做任何事情,只是调用无处可返回的函数

改变:

    if (json.rules[rule].hasOwnProperty("condition")) {
       buildString(json.rules[rule], outstring);
    } 

    if (json.rules[rule].hasOwnProperty("condition")) {
       // include the returned value in concatenated string
       outstring += buildString(json.rules[rule], outstring);
    }

DEMO

关于javascript - 递归函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914215/

相关文章:

javascript - 连接或不连接外部脚本?

javascript - 删除appendElement javascript

javascript - jQuery - 切换单击两次

php - 从 google chrome 网址中删除特殊字符

c - 在 C 中使用预递增递归

c++ - 递归确定数组中的元素是否可以求和到目标 - C++

javascript - 处理ui-routers解析功能中的错误? (又名 $stateChangeError)将数据传递到错误状态?

javascript - 停止某些链接(包含特定字符串的 href)工作

javascript - 无法通过ajax登录到https服务器

php - 将递归目录列表转换为 MySQL 表