diff --git a/lib/common/expression.js b/lib/common/expression.js index 2fc5988..699e581 100644 --- a/lib/common/expression.js +++ b/lib/common/expression.js @@ -14,7 +14,7 @@ function reduce(exp, callback) { while (loop) { loop = false; for (let i = 2; i < exp.length; ++i) { - const res = callback(exp[i - 1], exp[i]); + const res = callback(exp[i - 1], exp[i], i - 2); if (res !== REDUCE_SKIP) { loop = true; exp = exp.slice(); @@ -126,10 +126,10 @@ function evaluate(exp, obj, now, cb) { return REDUCE_SKIP; }); } else if (e[0] === "/") { - return reduce(e, (a, b) => { + return reduce(e, (a, b, i) => { if (!isArray(a) && !isArray(b)) { if (a == null || b == null) return null; - return a / b; + return i === 0 ? a / b : a * b; } return REDUCE_SKIP; }); @@ -142,10 +142,10 @@ function evaluate(exp, obj, now, cb) { return REDUCE_SKIP; }); } else if (e[0] === "-") { - return reduce(e, (a, b) => { + return reduce(e, (a, b, i) => { if (!isArray(a) && !isArray(b)) { if (a == null || b == null) return null; - return a - b; + return i === 0 ? a - b : a + b; } return REDUCE_SKIP; });