写一个方法计算只有加法和乘法的表达式,如: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

这个方法通过遍历表达式的每个字符,并根据字符的类型(数字、加号或乘号)来执行相应的操作。它使用一个栈来存储中间结果,并在遇到运算符时从栈中弹出相应的数字进行计算。

请注意,这个方法假设输入的表达式是有效的,并且只包含数字、加号和乘号。在实际应用中,你可能需要添加更多的错误处理和验证逻辑来确保表达式的正确性。

此外,这个方法没有考虑运算符的优先级。在上面的示例中,由于乘法和加法是左结合的,并且乘法在加法之前计算,因此该方法能够正确计算结果。但是,如果你需要处理更复杂的表达式,例如包含括号或需要考虑运算符优先级的情况,那么你需要实现一个更复杂的解析器来处理这些情况。

对于简单的只有加法和乘法的表达式,上述方法应该足够了。

posted @ 2024-12-23 09:22  王铁柱6  阅读(11)  评论(0编辑  收藏  举报