Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线.reduce()返回NaN?_Javascript_Underscore.js - Fatal编程技术网

Javascript 下划线.reduce()返回NaN?

Javascript 下划线.reduce()返回NaN?,javascript,underscore.js,Javascript,Underscore.js,应将1000以下的所有自然数(3或5的倍数)相加 var sum = _.reduce( _.range(1, 1000), function(x, n) { if (n % 3 == 0 || n % 5 == 0) { return x+=n; } }, 0); 我希望输出是233168,但我得到NaN 由于某种原因,sum不接受0的初始化值。但是,如果我在前面加上var sum=0然后它工作并返回正确的输出233168 为什么它不接受初始化的值?问题是当条件失败时,缩减函数返回未定义

应将1000以下的所有自然数(3或5的倍数)相加

var sum = _.reduce( _.range(1, 1000), function(x, n) {
  if (n % 3 == 0 || n % 5 == 0) { return x+=n; }
}, 0);
我希望输出是
233168
,但我得到
NaN

由于某种原因,
sum
不接受
0
的初始化值。但是,如果我在前面加上
var sum=0
然后它工作并返回正确的输出
233168


为什么它不接受初始化的值?

问题是当条件失败时,缩减函数返回未定义的值。。因此,
x
在随后的调用中计算为未定义(最后的返回值)。。未定义+一个数字是。。嗯,楠

而且,正在被错误地使用;它应该有自己的状态。将其与:

var sum = _.reduce( _.range(1, 1000), function(x, n) {
  // Add n to the tally if it is a valid multiple..
  // (the returned value is used as the *next* value of x)
  if (n % 3 == 0 || n % 5 == 0) { return x + n; }
  // ..or simply return the current tally.
  else { return x; }
}, 0);

请注意,
sum
变量不是从reduced函数内部赋值的(它无论如何都会被外部赋值覆盖)。这使得
reduce
成为一个纯粹的操作,尽管有时会滥用可变的备忘,但更真实。

问题是当条件失败时,reduce函数返回
未定义的
。。因此,
x
在随后的调用中计算为未定义(最后的返回值)。。未定义+一个数字是。。嗯,楠

而且,正在被错误地使用;它应该有自己的状态。将其与:

var sum = _.reduce( _.range(1, 1000), function(x, n) {
  // Add n to the tally if it is a valid multiple..
  // (the returned value is used as the *next* value of x)
  if (n % 3 == 0 || n % 5 == 0) { return x + n; }
  // ..or simply return the current tally.
  else { return x; }
}, 0);

请注意,
sum
变量不是从reduced函数内部赋值的(它无论如何都会被外部赋值覆盖)。这使
reduce
成为一种纯粹的操作,尽管有时会滥用可变备忘录,但更真实。

如果数字不是3或5的倍数,您将返回什么?仅供参考,您可以在顺序范围内对倍数求和,而无需循环。这只能用数学来完成。如果数字不是3或5的倍数,你会返回什么?仅供参考,你可以在不循环的情况下按顺序对倍数求和。这只能通过数学来完成。