javascript使用return for forEach

时间:2016-09-30 11:04:36

标签: javascript

我不确定问题标题是否正确,但我在尝试使用此功能时遇到了问题。

在第一个输出中,所有输出都是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);

6 个答案:

答案 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)

forEach是一个函数,无论forEach内的函数运行多少次,它都只返回1 undefined。所以你基本上是将1 undefined附加到总和上。

您可以使用reduce函数,该函数与forEach有些相似,只是在迭代完所有项后返回结果。

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