我正在尝试编写一个递归函数,如果它包含“expr”作为键而不是“number”,它将把JSON的那一部分反馈给函数。我的代码如下:
var result = 0;
function calc(str) {
var obj = JSON.parse(str);
if(obj.hasOwnProperty("expr")) {
var temp = obj.expr;
JSON.stringify(temp);
calc(temp);
}
if (obj.op == "add") {
var i = parseInt(obj.number);
result += i;
} else if(obj.op == "subtract") {
var i = parseInt(obj.number);
result -= i;
}
return result;
}
我收到一个语法错误,说“在位置1的JSON中出现意外的令牌o” Stringify不会将其重新格式化为字符串吗?如果是这样,我该怎么做呢?
我的输入如下:
result = calc('{“op”:“add”,“number”:5}');
result = calc('{“op”:“subtract”,“number”:2}');
result = calc('{“op”:“add”,“number”:19}');
result = calc('{“op”:“subtract”,“expr”:{“op”:“add”,“number”:15}}');
答案 0 :(得分:1)
应该是这样的:
function calc(str) {
var res = 0;
var obj = (typeof str =="string") ? JSON.parse(str) : str;
if(obj.hasOwnProperty("expr")) obj.number = calc(obj.expr);
switch(obj.op){
case "add":
res += +obj.number;
break;
case "subtract":
res -= +obj.number;
break;
}
return res;
}
输入
var result = 0;
result += calc('{"op" : "add", "number" : 5}');
result += calc('{"op" : "subtract", "number" : 2}');
result += calc('{"op" : "add", "number" : 19}');
result += calc('{"op": "subtract", "expr" : {"op" : "add", "number" : 15}}');
答案 1 :(得分:0)
我明白了。
var result = 0;
function calc(str) {
var obj = JSON.parse(str);
var i = parseInt(obj.number);
if(obj.hasOwnProperty("expr")) {
var temp = obj.expr;
temp = JSON.stringify(temp);
var i = calc(temp);
}
if (obj.op == "add") {
result += i;
} else if(obj.op == "subtract") {
result -= i;
}
return result;
}