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'));