写一个方法计算只有加法和乘法的表达式,如:2+3*9+6
在前端开发中,你可以使用JavaScript的eval()
函数来计算这样的表达式,但出于安全考虑,eval()
通常不推荐使用,因为它可以执行任何JavaScript代码,这可能导致潜在的安全风险。
因此,为了更安全地计算只包含加法和乘法的表达式,你可以自己实现一个简单的解析器。以下是一个示例方法,它使用栈数据结构来计算表达式:
function calculateExpression(expression) {
// 移除空格,并替换所有的乘法符号为JavaScript中的标准乘法符号
expression = expression.replace(/\s+/g, '').replace(/\*/g, '*');
const stack = [];
let currentNumber = '';
let result;
for (let char of expression) {
if (char >= '0' && char <= '9') {
currentNumber += char;
} else {
if (currentNumber) {
stack.push(parseFloat(currentNumber));
currentNumber = '';
}
if (char === '+') {
if (stack.length >= 2) {
const b = stack.pop();
const a = stack.pop();
stack.push(a + b);
}
} else if (char === '*') {
if (stack.length >= 2) {
const b = stack.pop();
const a = stack.pop();
stack.push(a * b);
}
}
}
}
if (currentNumber) {
stack.push(parseFloat(currentNumber));
}
if (stack.length === 1) {
result = stack.pop();
}
return result;
}
// 示例用法
const expression = '2+3*9+6';
const result = calculateExpression(expression);
console.log(result); // 输出应为 35
这个方法通过遍历表达式的每个字符,并根据字符的类型(数字、加号或乘号)来执行相应的操作。它使用一个栈来存储中间结果,并在遇到运算符时从栈中弹出相应的数字进行计算。
请注意,这个方法假设输入的表达式是有效的,并且只包含数字、加号和乘号。在实际应用中,你可能需要添加更多的错误处理和验证逻辑来确保表达式的正确性。
此外,这个方法没有考虑运算符的优先级。在上面的示例中,由于乘法和加法是左结合的,并且乘法在加法之前计算,因此该方法能够正确计算结果。但是,如果你需要处理更复杂的表达式,例如包含括号或需要考虑运算符优先级的情况,那么你需要实现一个更复杂的解析器来处理这些情况。
对于简单的只有加法和乘法的表达式,上述方法应该足够了。