JSFiddle - React, Tailwind, and code Playground
by Steven Senkus
JavaScript
var calculate = function(s) {
let strArr = s.split('');
strArr = strArr.filter(item => item !== ' ');
function isInt(num) {
return parseInt(num) !== NaN;
}
for (let i = 0; i < strArr.length; i++) {
if (isInt(strArr[i]) && isInt(strArr[i+1])) {
strArr[i] = strArr[i] + strArr[i+1]
i = 1;
}
}
for (let i = 0; i < strArr.length; i++) {
if (strArr[i] === '+' || strArr[i] === '-') {
continue;
} else if (!['*','/'].includes(strArr[i])) {
strArr[i] = Number(strArr[i])
continue;
} else {
let prevItem = Number(strArr[i - 1]);
let nextItem = Number(strArr[i + 1])
let result = (strArr[i] === '*') ? (prevItem * nextItem) : Math.floor(prevItem / nextItem);
strArr.splice(i - 1, 3, result)
i = 0;
}
}
for (let i = 0; i < strArr.length; i++) {
if (strArr.length === 1) break;
if (strArr[i] === '+' || strArr[i] === '-') {
let prevItem = Number(strArr[i - 1]);
let nextItem = Number(strArr[i + 1])
let result = (strArr[i] === '+') ? (prevItem + nextItem) : (prevItem - nextItem);
strArr.splice(i - 1, 3, result)
i = 0;
}
continue;
}
return strArr[0] + '';
};
console.log(calculate('43'));