nikolayneykov

Untitled

May 20th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2.     let validExpressionPattern = /(\d+(\.\d+)?)\s([+\-*/])\s(\d+(\.\d+)?)/;
  3.     let expression = document.querySelector('p#expressionOutput');
  4.     let resultOutput = document.querySelector('p#resultOutput');
  5.     [...document.querySelectorAll('button')]
  6.         .filter(x => x.value !== '=' && x.value !== 'Clear')
  7.         .forEach(x => x.addEventListener('click', displayExpression));
  8.  
  9.     document.querySelector('button[value="="]').addEventListener('click', displayResult);
  10.     document.querySelector('button[value="Clear"]').addEventListener('click', clear);
  11.  
  12.     function displayExpression() {
  13.         if (this.value === '+' || this.value === '-' || this.value === '*'|| this.value ==='/') {
  14.             expression.textContent += ` ${this.value} `;
  15.         }else{
  16.             expression.textContent += this.value;
  17.         }
  18.     }
  19.  
  20.     function displayResult() {
  21.         let match = expression.textContent.match(validExpressionPattern);
  22.         if (match) {
  23.             let leftOperand = +match[1];
  24.             let operator = match[3];
  25.             let rightOperand = +match[4];
  26.             let result = 0;
  27.             switch (operator) {
  28.                 case '+': result = leftOperand + rightOperand; break;
  29.                 case '-': result = leftOperand - rightOperand; break;
  30.                 case '*': result = leftOperand * rightOperand; break;
  31.                 case '/': result = leftOperand / rightOperand; break;
  32.             }
  33.  
  34.             resultOutput.textContent = result;
  35.         } else {
  36.             resultOutput.textContent = 'NaN';
  37.         }
  38.     }
  39.  
  40.     function clear() {
  41.         expression.textContent = '';
  42.         resultOutput.textContent = '';
  43.     }
  44. }
Add Comment
Please, Sign In to add comment