我想编写一个对提供的所有参数执行算术运算的函数。例如,如果我这样做:
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));
这不起作用,所以我什至无法前进。
答案 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));