Как создать функцию, которая принимает несколько аргументов для выполнения арифметического вычисления c в JavaScript? - PullRequest
0 голосов
/ 05 января 2020

Я хочу написать функцию, которая выполняет арифметику c на ВСЕХ предоставленных аргументах. Так, например, если я сделаю:

calculate('+', 3, 5, 6)

Он должен вернуть 14 (что составляет 3 + 5 + 6)

Или если я сделаю

calculate('*', 6,3,6,8,)

Возвращается 864 (что эквивалентно умножению всех этих чисел).

Функция, по сути, должна иметь возможность обрабатывать любое количество чисел, которые я ей предоставляю, Я также могу работать с основными арифметическими c операторами, такими как + - / *

. Я новичок в программировании. Я пробовал:

function mCalc(_operator){
  if(_operator=='+'){
    return arguments + arguments;
  }

}
console.log(mCalc('+',5,5));

это не работает, поэтому я даже не могу двигаться вперед.

Ответы [ 2 ]

5 голосов
/ 05 января 2020

В каждой функции у вас есть объект аргументов , см. Раздел Остальные, стандартные и деструктурированные параметры как говорится:

Объект аргументов может использоваться вместе с параметрами rest, default и destructured.

function foo(...args) { return args; }

После того, как у вас есть все аргументы, необходимые для расчета, просто используйте Array.prototype.reduce(). Как документация, в которой говорится:

Метод redu () выполняет функцию редуктора (которую вы предоставляете) для каждого элемента массива, в результате чего получается одно выходное значение.

Полагаю, вы можете использовать следующее:

const mCalc = (_operator, ...args) => {
  if(_operator === '+') {
      return args.reduce((a, c) => a + c, 0);
  }

  // rest what you want to implement
}

const result = mCalc('+', 3, 5, 6, 2);

console.log(result);

Надеюсь, это поможет!

2 голосов
/ 05 января 2020

Вы можете взять объект для операторов и уменьшить значения, используя функцию, которая возвращает функцию для двух операндов.

При вызове функции оператор берется, а значения переносятся в массив с помощью используя остальные параметры ....

В этом подходе используются функции стрелок , например

calculate = (op, ...values) => values.reduce(take(op));
^^^^^^^^^                                               name of the function/variable
            ^^^^^^^^^^^^^^^                             parameters
                            ^^                          arrow
                               ^^^^^^^^^^^^^^^^^^^^^^^  return value

const
    operators = {
        '+': (a, b) => a + b,
        '*': (a, b) => a * b
    },
    take = op => operators[op],
    calculate = (op, ...values) => values.reduce(take(op));

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