const fns = {
'+': (a, b) => a + b,
'-': (a, b) => a - b,
'*': (a, b) => a * b,
'/': (a, b) => a / b,
}
const isNumber = n => {
return '0123456789'.includes(n)
}
function calcExpression(exp = '') {
let [opt, num] = [[], []]
for (let i = 0; i < exp.length; ++i) {
let c = exp[i]
if ('+-*/('.includes(c)) {
opt.push(c)
} else if (c === ')') {
// 开始计算
let b = num.pop()
let a = num.pop()
let o = opt.pop()
num.push(fns[o](a, b))
// pop掉(
opt.pop()
} else {
// 截取整个数字
let j = i;
while (isNumber(exp[j])) ++j
let currNum = parseInt(exp.slice(i, j))
i = j - 1
if ('*/'.includes(opt[opt.length - 1])) {
let a = num.pop()
num.push(fns[opt.pop()](a, currNum))
} else num.push(currNum)
}
}
while (opt.length) {
let b = num.pop()
let a = num.pop()
let o = opt.pop()
num.push(fns[o](a, b))
}
return num.pop()
}
console.log(calcExpression('3*(2+4)'), 3 * (2 + 4))
console.log(calcExpression('88/(4+3)'), 88 / (4 + 3))
大一那会做的,今天又遇到了,也实现了。 放在这里当一个巩固吧。