Функция Infix to Postfix добавляет неопределенный элемент в мой конечный результат - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь создать функцию Javascript, которая принимает уравнение Инфикса и преобразует его в уравнение Постфикса. Кажется, что он работает нормально, за исключением того, что он продолжает добавлять «неопределенный» элемент в конечный результат. Это происходит только тогда, когда первый оператор в уравнении НЕ является умножением. Вот пример, чтобы показать, что я имею в виду. https://jsfiddle.net/tskL8o0y/

INFIX: 6 * 2 + 1 ---> POSTFIX: 6, 2, *, 1, +
INFIX: 6/2 + 1 --- > POSTFIX: 6,, 2, /, 1, +
, как вы можете видеть в Postfix для тех, кроме умножения, между 6 и 2 есть пустое пространство массива.

    function postFix(expression) {
    let expressionA = expression.split(" ");

    let operatorStack = [];
    let output = [];

    for (let i = 0; i < expressionA.length; i++) {

        if (isNaN(expressionA[i])) {

            if ((operatorStack[operatorStack.length - 1] === '/' || operatorStack[operatorStack.length - 1] === '*' || operatorStack[operatorStack.length - 1] === "^") && (expressionA[i] === '+' || expressionA[i] === "-")) {

                output.push(operatorStack[operatorStack.length - 1]);
                operatorStack.pop();
                operatorStack.push(expressionA[i]);

            } else if ((operatorStack[operatorStack.length - 1] === '^') && (expressionA[i] === '*') || (expressionA[i] === '/') || (expressionA[i] === '-') || (expressionA[i] === '+')) {


                output.push(operatorStack[operatorStack.length - 1]);
                operatorStack.pop();
                operatorStack.push(expressionA[i]);

            } else {
                operatorStack.push(expressionA[i]);
            }


        } else {
            output.push(expressionA[i]);
        }


    }

    for (let i = operatorStack.length - 1; operatorStack.length >= 1; i--) {
        output.push(operatorStack[i]);
        operatorStack.pop();
    }

    return output;

}

...