我试图创建一个将所有参数传递给它的函数。可以传递给函数的参数量可以变化。到目前为止我有这个
var multiply = function () {
var i, sum = 0;
for (i = 0; i < arguments.length; i++) {
sum *= arguments[i];
}
return sum;
};
当我这样称呼它时 - multiply(10, 5, 5)
- 当答案应为250(10 x 5 x 5)时,它返回0。我在这做错了什么?
答案 0 :(得分:2)
您也可以使用Array.prototype.reduce():
来完成此操作reduce()方法对累加器和数组的每个值(从左到右)应用一个函数,将其减少为单个值。
除了你明确表示你想通过使用一个用于此目的的函数来累积值之外,它并没有比for循环更有优势。
var multiply = function () {
return Array.prototype.reduce.call(arguments, function(a, b) {
return a * b;
});
};
您需要使用Array.prototype.reduce.call
构造,因为arguments
在大多数环境中只是一个类似于对象的数组。
答案 1 :(得分:1)
将任何数字与0
相乘是0
。
所以设置var sum = 1;
答案 2 :(得分:1)
从ES6开始,答案就是=&gt;
const multiply = (..args) => args.reduce((accum, val) => accum * val, 1);