Функция Javascript - преобразование строкового аргумента в оператор - PullRequest
0 голосов
/ 30 августа 2018

Извиняюсь, если мой вопрос неясен, не знаю, как это сформулировать!

Я пытаюсь создать функцию, которая принимает два числа и строку, содержащую оператор (например, '+', '-', '*', '/').

Я использовал .valueOf () в строке для извлечения оператора, однако аргументы num1 и num2, по-видимому, не соответствуют переданным числовым параметрам. Почему это происходит?

function calculate(num1, operator, num2) {
  return `num1 ${operator.valueOf()} num2`;
}
undefined


calculate(2, '+', 1);
"num1 + num2"         //result

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Лучший способ сделать то, что вы хотите, - это объект, который отображает имена операторов в функции.

const opmap = {
  "+": (x, y) => x + y,
  "-": (x, y) => x - y,
  "*": (x, y) => x * y,
  "/": (x, y) => x / y,
};

function calculate(num1, operator, num2) {
  if (operator in opmap) {
    return opmap[operator](num1, num2);
  }
}

console.log(calculate(2, '+', 1));
0 голосов
/ 30 августа 2018

Если я понимаю ваши требования, вы можете использовать eval() для достижения этой цели:

function calculate(num1, operator, num2) {
  return eval(`${num1} ${operator} ${num2}`);
}

console.log(calculate(2, '+', 1)); // 3

Кроме того, вы можете избежать использования eval(), используя блок переключателей, который сделает ваш код проще для отладки и потенциально более безопасным :

function calculate(num1, operator, num2) {
  switch (operator.trim()) { // Trim possible white spaces to improve reliability
    case '+':
      return num1 + num2
    case '-':
      return num1 - num2
    case '/':
      return num1 / num2
    case '*':
      return num1 * num2
  }
}

console.log(calculate(2, '+', 1)); // 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...