下划线_.reduce澄清?

时间:2013-02-20 16:11:09

标签: javascript underscore.js

我刚开始更深入地探索JavaScript Underscore库,只是想澄清一下我的想法_.reduce()(也称为injectfoldl)的做法是对的。我的问题是:下面是对吗?

调用_.reduce([1, 2, 3, 4, 5], function(memo, num) { return memo + num; }, 5);时,会发生以下情况:

  • memo5
  • 开始
  • memo + list[0] = memo = 6
  • memo + list[1] = memo = 8
  • memo + list[2] = memo = 11
  • memo + list[3] = memo = 15
  • memo + list[4] = memo = 20

这就是ran函数返回20的原因。是对的吗?因此_.reduceRight()恰恰相反,从memo + list[ /* last element in array */ ]开始?

感谢。

问候。

1 个答案:

答案 0 :(得分:11)

是的,这是正确的。 reduce回调的第一个参数表示从上一次迭代(或第一次迭代中的种子)返回的值。

回调的第二个参数是Array当前迭代的值。

因此,第一个参数是你想要达到的结果的累加器。所有迭代完成后,从_.reduce函数返回最终值。