私の目標は、calc(string)
関数に渡される文字列は、その式の内部で操作を実行するために"expr"
という名前のキーを持っている場合、私はそれをしたいと思い、オプションreviver argument
とJSON.parse
機能を伝えることです、残りの文字列を操作するために外側を続けます。JSON.parseリバイバー機能ネストされたオブジェクト
これを実行するたびに、私はNaN
を取得しています。
console.log(initNumber)
の前に2つの最後のcalc(string)
コールをコメントアウトすると、プログラムは正常に実行されます。
したがって、キーが"expr"
で、ネストされたキーの値が"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);
ありがとうございました。それでは、今やもっと意味が分かります。したがって、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'はそれらを取り囲む' add'または 'subtract'演算によって見られる時にすでに値に変換されているはずです。 –
華麗です。完全に意味をなさない:) – giggidy