@Encoders

Как можно доработать функцию?

Есть функция которая считает строку и работает, как строковой калькулятор, как можно её доработать, чтобы можно было ввести скобки. В голову ничего не приходит, может кто что подскажет
function calculator(value){
  if(typeof value !== "string"){
    return "Не строка";
  }
  let signs = value.match(/\+|\-(?!\d)|\*|\//g);
  let numbers = value.match(/\d+|(\-?\d+)/g);
  let character = value.match(/[^0-9\+\-\*\/|(|)]/g);
  if(signs == null || numbers == null || numbers.length > 5 || character != null){
    return "Введенно не выражение";
  }
  for(i = 0; signs.indexOf("*") != -1 || signs.indexOf("/") != -1; i++){
    if(signs[i] == "*" || signs[i] == "/"){
      let newNumber = countingNumbers(numbers[i],numbers[i+1],signs[i]);
      if(newNumber == "Деление на 0"){
        return "Деление на 0";
      }
      signs.splice(i,1);
      numbers[i] = newNumber;
      numbers.splice(i+1,1);
      i--;
    }
  }
  for(i = 0; signs.indexOf("+") != -1 || signs.indexOf("-") != -1;){
      let newNumber = countingNumbers(numbers[i],numbers[i+1],signs[i]);
      signs.splice(i,1);
      numbers[i] = newNumber;
      numbers.splice(i+1,1);
      console.log(signs);
      console.log(numbers);
  }
  return numbers[0];
}
function countingNumbers(number1, number2, action) {
  switch (action) {
    case "+":
    return Number(number1) + Number(number2);
    case "-":
    return Number(number1) - Number(number2);
    case "*":
    return Number(number1) * Number(number2);
    case "/":
    if (number2 !== "0") {
      return Number(number1) / Number(number2);
    } else {
      return "Деление на 0";
    }
  }
}
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 2
Alexandre888
@Alexandre888
Javascript-разработчик
похожий вопрос уже был.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Переведите выражение в обратную польскую запись, избавитесь от скобок и получите однозначный ход вычислений.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы