JSFiddle - React, Tailwind, and code Playground
by isochronous
HTML
<div id="expression">4 3 2 + -</div>
<div id="result"></div>
JavaScript
var evaluatePostfix = function(expr) {
var parts = expr.split(' ');
// need to read each part and detect whether or not it's an operator
var i, partsLength, part, arg1, arg2, tmpResult, resArray = [];
for (i = 0, partsLength = parts.length; i < partsLength; i++ ) {
part = parts[i];
if ( part === "+" || part === "-" ) {
arg1 = resArray.pop();
arg2 = resArray.pop();
tmpResult = (part === "+") ? arg2 + arg1 : arg2 - arg1;
console.log('part is an operator, using arguments %d and %d with operator %s, result is %d', arg2, arg1, part, tmpResult);
resArray.push(tmpResult);
console.log('pushing ', tmpResult);
} else {
console.log('part is a number, pushing %d', +part);
resArray.push(+part);
}
}
return resArray.pop();
};
var exp = $('#expression').text();
$('#result').text( evaluatePostfix(exp) );