'Postfix Algorithm Evaluation in JS
this is what we start with: '7.7+7'
The input of the function is an array of strings (original input converted to postfix): 7.7,7,+
then would get fed back into another function in order to display within my html page. this function is nested in another parent function to call with class object.
this.postfixEval = function(postfixArray){
        var stack = new Stack();
        for( element of postfixArray){
            console.log("element: " + element);
            if(isNaN(element)){
                var x = stack.pop();
                var y = stack.pop();
                console.log("var x/y: " + x + " " + y + " element: " + element) ;
                if (element == "+"){
                    result = (y+x);
                    console.log("Expected Result: " + result)
                    stack.push(y + x);
                } else if (element == '-'){
                    stack.push(y - x);
                } else if (element == '*'){
                    stack.push(y * x);
                } else if (element == '/'){
                    stack.push(y / x);
                }
            } else {
                stack.push( parseFloat(element) );
            }
        }
        //final check for non numbers within the stack
        var returnValue = null;
        while( !stack.isEmpty() ){
            stack.print();
            var element = stack.pop();  
            if(isNaN(element)){
                continue;
            } else{
                returnValue = element;
            }
        }
        return returnValue;
    }
I'm not sure what i'm doing wrong? the output is simply 7.7. Here is a sample of the logging in attempt to debug:
scripts.js:75 postFix: 7.7,7,+ 
scripts.js:145 undefined
scripts.js:175 element: 7.7
scripts.js:175 element: 7
scripts.js:175 element: + 
scripts.js:180 var x/y: 7 7.7 element: + 
scripts.js:76 result: null
Thank you for your time and help in advance.
Solution 1:[1]
If I replace your new Stack with a simple array, and make the necessary adjustments to accommodate that change, I get the correct answer...
function postfixEval( postfixArray ) {
        var stack = [];
        for( element of postfixArray){
            console.log("element: " + element);
            if(isNaN(element)){
                var x = stack.pop();
                var y = stack.pop();
                console.log("var x/y: " + x + " " + y + " element: " + element) ;
                if (element == "+"){
                    result = (y+x);
                    console.log("Expected Result: " + result)
                    stack.push(y + x);
                } else if (element == '-'){
                    stack.push(y - x);
                } else if (element == '*'){
                    stack.push(y * x);
                } else if (element == '/'){
                    stack.push(y / x);
                }
            } else {
                stack.push( parseFloat(element) );
            }
        }
        //final check for non numbers within the stack
        var returnValue = null;
        while( stack.length > 0 ){
            console.log( stack );
            var element = stack.pop();  
            if(isNaN(element)){
                continue;
            } else{
                returnValue = element;
            }
        }
        return returnValue;
    }
    
postfixEval(['7.7','7','+']);
    Solution 2:[2]
This is my approach:
const value = '2 3 * 1 - 5 /';
function postfixEval( expr ) {
    let stack = [];
    const arr = expr.split('').filter((el)=>el !== " " )
    console.log( arr );
    for( element of arr){
        console.log("element: " + element);
        if(isNaN(element)){
            var y = stack.pop();
            var x = stack.pop();
            const result = eval(x+element+y)
            stack.push(result)
            console.log( result );  
        } else {
            stack.push( parseFloat(element) );
        }
    }
        console.log( typeof stack[0] );
    return stack[0];
}
Solution 3:[3]
Lee SEE My Approach
function evaluatePostfix(exp) {
    let stack=[];
    
    
    for(let i=0;i<exp.length;i++)
    {
        let c=exp[i];
        
        
        if(! isNaN( parseInt(c) ))
        stack.push(c.charCodeAt(0) - '0'.charCodeAt(0));
        
        
        else
        {
            let val1 = stack.pop();
            let val2 = stack.pop();
            
            switch(c)
            {
                case '+':
                stack.push(val2+val1);
                break;
                
                case '-':
                stack.push(val2- val1);
                break;
                
                case '/':
                stack.push(val2/val1);
                break;
                
                case '*':
                stack.push(val2*val1);
                break;
        }
        }
    }
    return stack.pop();
}
let exp="121*+2-"; document.write("postfix evaluation: "+evaluatePostfix(exp));
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Trentium | 
| Solution 2 | Mansour Ashraf | 
| Solution 3 | iamKaranSharmaB | 
