У меня есть функция recusive, которая должна проходить через объект json и выводить выражение. Тем не менее, мой recusion, кажется, от, потому что он выводит field1! = «» И field3 == «», когда он должен быть вывод field1! = «» И field2 == «» И 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, ""));
Всегда что-то глупое. Спасибо, сэр. – mwilson
На самом деле это 'outstring = buildString (json.rules [rule], outstring)' или 'outstring + = buildString (json.rules [rule]," ")' – Thomas