我有一个可恢复的功能,该功能应该遍历json对象并输出表达式。然而,我recusion似乎是了,因为它的输出字段1!=“” AND场3 ==“”时,它应该是输出字段1!=“”和Field2 ==“” AND场3 ==“”
我尝试了几种不同的方法,使它起作用的唯一方法是创建全局变量,outstring
而不是将其传递给函数。我要去哪里?当我逐步执行该操作时,我会看到正确的结果,但是一旦堆栈反转,它将开始重置outstring
,然后再次将其堆栈回去,但忽略了中间(field2)。
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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句