如何创建一个接受多个参数的函数以在JavaScript中执行算术计算?

时间:2020-01-05 15:12:02

标签: javascript function math

我想编写一个对提供的所有参数执行算术运算的函数。例如,如果我这样做:

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

它应该返回14(即3 + 5 + 6)

或者,如果我这样做

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

它应该返回864(相当于将所有这些数字相乘)。

该函数本质上应该能够处理我提供给它的任意数量的数字,同时还能够处理+-/ *

等主要算术运算符

我是编程新手。我尝试过:

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

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

这不起作用,所以我什至无法前进。

2 个答案:

答案 0 :(得分:5)

在每个函数中,您都有一个arguments object,请参见剩余,默认值和已解构参数部分:

arguments对象可以与rest,default和destructed参数一起使用。

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

一旦有了计算所需的所有参数,只需使用Array.prototype.reduce()。如说明文件所述:

reduce()方法在数组的每个元素上执行一个reducer函数(由您提供),从而产生单个输出值。

我想您可以使用以下内容:

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);

希望对您有帮助!

答案 1 :(得分:2)

您可以使用一个对象作为运算符,并使用返回两个操作数的函数的函数来减小值。

通过调用该函数,可以使用rest parameters ...来获取运算符并将值取到数组中。

这种方法使用arrow functions,例如

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));