我不确定问题标题是否正确,但我在尝试使用此功能时遇到了问题。
在第一个输出中,所有输出都是NaN
,但在第二个输出中,代码可以正常工作。我不明白为什么第一个不能工作,导致这种不同结果的原因。
希望你能帮助我。
非常感谢!
//1
function sum(...rest) {
var sum=0;
sum+=rest.forEach(function (value){
return value;
});
return sum;
}
sum();
sum(1);
sum(2,3);
//2
function sum(...rest) {
var sum=0;
rest.forEach(function (value){
sum+=value;
});
return sum;
}
sum();
sum(1);
sum(2,3);
答案 0 :(得分:2)
forEach
没有返回值by definition
如果您需要此行为,最好使用reduce:
function sum(...rest) {
return rest.reduce(function(prev, next) { return prev + next; });
};
答案 1 :(得分:0)
您不能像第一个示例中那样使用forEach
。
您需要的是Array.prototype.reduce
。
这可以累积迭代中的值,如下所示:
function sum(...rest) {
return rest.reduce(function(result, item) {
return result += item;
});
}
答案 2 :(得分:0)
您可以使用map()
函数获取每个元素的总和。通过arguments
变量
function sum() {
var sum=0;
var args=[];
for(i in arguments) args.push(arguments[i]);
if(args.length>0){
sum = args.reduce(function(total, value) {
return total + value;
});
}
return sum;
}
console.log(sum());
console.log(sum(1));
console.log(sum(1,2,3));

答案 3 :(得分:0)
答案 4 :(得分:0)
以下是sum()
函数的一个实现,使用Array.prototype.reduce()并添加一个等于零的初始值:
let sum = (...rest) => rest.reduce((result, value) => result + value, 0);
console.log(sum());
console.log(sum(1));
console.log(sum(1, 2, 3));
console.log(sum(-3, -5));

答案 5 :(得分:0)
您可以将Array#reduce
与箭头功能和起始值一起使用。
var sum = (...rest) => rest.reduce((a, b) => a + b, 0);
console.log(sum());
console.log(sum(1));
console.log(sum(2, 3));