【发布时间】:2016-01-21 02:12:57
【问题描述】:
我有一个递归函数,它应该循环一个 json 对象并输出表达式。但是,我的回避似乎已经关闭,因为它在输出 field1 != '' AND field3 == '' 时应该输出 field1 != '' AND field2 == '' AND field3 == ''
我尝试了几种不同的方法,唯一能让它工作的方法是创建一个全局变量outstring,而不是将其传递给函数。我去哪儿了?当我单步执行时,我看到了正确的结果,但是一旦堆栈反转,它就会开始重置outstring,然后再次将其堆叠起来,但会忽略中间(字段2)。
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, ""));
【问题讨论】:
标签: javascript jquery recursion