Fix subtract and divide in expression.evaluate
This commit is contained in:
1 parent
0b59811924
commit
192ed6b034
1 file changed
+5
-5
@@ -14,7 +14,7 @@ function reduce(exp, callback) {
|
|||||||
while (loop) {
|
while (loop) {
|
||||||
loop = false;
|
loop = false;
|
||||||
for (let i = 2; i < exp.length; ++i) {
|
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) {
|
if (res !== REDUCE_SKIP) {
|
||||||
loop = true;
|
loop = true;
|
||||||
exp = exp.slice();
|
exp = exp.slice();
|
||||||
@@ -126,10 +126,10 @@ function evaluate(exp, obj, now, cb) {
|
|||||||
return REDUCE_SKIP;
|
return REDUCE_SKIP;
|
||||||
});
|
});
|
||||||
} else if (e[0] === "/") {
|
} else if (e[0] === "/") {
|
||||||
return reduce(e, (a, b) => {
|
return reduce(e, (a, b, i) => {
|
||||||
if (!isArray(a) && !isArray(b)) {
|
if (!isArray(a) && !isArray(b)) {
|
||||||
if (a == null || b == null) return null;
|
if (a == null || b == null) return null;
|
||||||
return a / b;
|
return i === 0 ? a / b : a * b;
|
||||||
}
|
}
|
||||||
return REDUCE_SKIP;
|
return REDUCE_SKIP;
|
||||||
});
|
});
|
||||||
@@ -142,10 +142,10 @@ function evaluate(exp, obj, now, cb) {
|
|||||||
return REDUCE_SKIP;
|
return REDUCE_SKIP;
|
||||||
});
|
});
|
||||||
} else if (e[0] === "-") {
|
} else if (e[0] === "-") {
|
||||||
return reduce(e, (a, b) => {
|
return reduce(e, (a, b, i) => {
|
||||||
if (!isArray(a) && !isArray(b)) {
|
if (!isArray(a) && !isArray(b)) {
|
||||||
if (a == null || b == null) return null;
|
if (a == null || b == null) return null;
|
||||||
return a - b;
|
return i === 0 ? a - b : a + b;
|
||||||
}
|
}
|
||||||
return REDUCE_SKIP;
|
return REDUCE_SKIP;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user