1
我的目标是告诉功能与可选reviver argument
,我希望它是否传递给calc(string)
函数的字符串有一个名为"expr"
的键执行该表达式内的操作,然后继续向外工作以操作其余的字符串。JSON.parse reviver函数嵌套对象
每当我运行这个我越来越NaN
。
如果我在console.log(initNumber)
之前注释掉最后两个calc(string)
调用,那么程序按预期运行。
因此,如果密钥是"expr"
,并且嵌套"op"
密钥的值是"add"
,则对该嵌套对象执行add()函数。如果"op"
密钥为"subtract"
,则也是如此。
任何帮助非常感谢。
var initNum = 0;
var calc = function(string) {
var calcString = JSON.parse(string, reviver);
add(calcString);
subtract(calcString);
};
var add = function(string) {
if (string["op"] == "add") {
var numString = parseInt(JSON.stringify(string["number"]));
initNum = numString + initNum;
return initNum;
}
}
var subtract = function(string) {
if (string["op"] == "subtract") {
var numString = parseInt(JSON.stringify(string["number"]));
initNum = initNum - numString;
return initNum;
}
}
var reviver = function(key, val) {
if (key == "expr") {
if (val.op == "add") {
return add(val);
}
else if (val.op == "subtract") {
return subtract(val);
}
}
else {
return val;
}
};
calc('{"op" : "add", "number" : 5}');
calc('{"op" : "subtract", "number" : 2}');
calc('{"op" : "add", "number" : 19}');
calc('{"op": "subtract", "expr" : {"op" : "add", "number" : 15}}');
calc('{"op": "add", "expr" : {"op" : "add", "expr" : {"op" : "subtract", "number" : 3}}}');
console.log(initNum);
谢谢你这么多。这使得wayyyyyyy现在更有意义。因此,在var操作数部分中,您现在说“如果JSON对象具有”数字“键,请使用该键,否则使用”expr“键。”谢谢谢谢。 – giggidy
'如果JSON对象有一个“数字”键,那么使用它,否则使用“expr”键'是的,确切地说。并且因为'reviver'是[定义](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)“工作”,从最嵌套的属性开始进行到原来的价值本身',所有'expr's应该已经被转换为他们的价值观,当他们被看到'add或'subtract'围绕他们。 –
刚刚辉煌。总体感觉。 :) – giggidy