Search
 
SCRIPT & CODE EXAMPLE
 

JAVASCRIPT

logic for building calculator using JavaScript without using eval

function parseCalculationString(s) {
    // --- Parse a calculation string into an array of numbers and operators
    var calculation = [],
        current = '';
    for (var i = 0, ch; ch = s.charAt(i); i++) {
        if ('^*/+-'.indexOf(ch) > -1) {
            if (current == '' && ch == '-') {
                current = '-';
            } else {
                calculation.push(parseFloat(current), ch);
                current = '';
            }
        } else {
            current += s.charAt(i);
        }
    }
    if (current != '') {
        calculation.push(parseFloat(current));
    }
    return calculation;
}

function calculate(calc) {
    // --- Perform a calculation expressed as an array of operators and numbers
    var ops = [{'^': (a, b) => Math.pow(a, b)},
               {'*': (a, b) => a * b, '/': (a, b) => a / b},
               {'+': (a, b) => a + b, '-': (a, b) => a - b}],
        newCalc = [],
        currentOp;
    for (var i = 0; i < ops.length; i++) {
        for (var j = 0; j < calc.length; j++) {
            if (ops[i][calc[j]]) {
                currentOp = ops[i][calc[j]];
            } else if (currentOp) {
                newCalc[newCalc.length - 1] = 
                    currentOp(newCalc[newCalc.length - 1], calc[j]);
                currentOp = null;
            } else {
                newCalc.push(calc[j]);
            }
            console.log(newCalc);
        }
        calc = newCalc;
        newCalc = [];
    }
    if (calc.length > 1) {
        console.log('Error: unable to resolve calculation');
        return calc;
    } else {
        return calc[0];
    }
}
var calculateButton = document.getElementById('calculate'),
    userInput = document.getElementById('userInput'),
    result = document.getElementById('result');
calculateButton.addEventListener('click', function() {
    result.innerHTML = "The answer is " + calculate(parseCalculationString(userInput.value));
});
Comment

PREVIOUS NEXT
Code Example
Javascript :: enable version 12 node glitch 
Javascript :: jstl replace 
Javascript :: dangerouslySetInnerHTML did not match error in React 
Javascript :: javascript get utc time 
Javascript :: import path in ES6 module 
Javascript :: redirect in jsp 
Javascript :: react get screen width 
Javascript :: process.now() nodejs 
Javascript :: react-native release build 
Javascript :: gitignore for angular 
Javascript :: how to call await outside async function in js 
Javascript :: ReferenceError: fetch is not defined 
Javascript :: how to enable and disable href in javascript 
Javascript :: writing to file in node js 
Javascript :: phone number regex angular 
Javascript :: react router get host origin js 
Javascript :: foreach nodejs 
Javascript :: trigger click jquery 
Javascript :: js random number between 1 and 10 
Javascript :: open google map with latitude and longitude javascript 
Javascript :: require statement not part of import statement javascript 
Javascript :: javascript print subarray from index to indeex 
Javascript :: javascript middle of array 
Javascript :: sqlite3 multithreading nodejs 
Javascript :: order datatable 
Javascript :: python json to excel converter 
Javascript :: https package node post request 
Javascript :: open page in new tab using jquery 
Javascript :: window.history.pushstate typescript 
Javascript :: js foreach determine if last 
ADD CONTENT
Topic
Content
Source link
Name
7+5 =