2013-02-20 73 views
6

我刚开始探索的JavaScript库下划线更深入,只是想澄清什么,我认为_.reduce()(也称为injectfoldl)确实是正确的。我的问题是:是在下面的权利?下划线_.reduce澄清?

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

  • memo开始于5
  • 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

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

谢谢。

问候。

回答

11

是的,这是正确的。第一个参数到reduce回调代表从最后一次迭代(或种子在第一次迭代时)返回的值。

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

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

+0

非常感谢,所有我想要的。祝你今天愉快。 – raf 2013-02-20 16:14:15

+0

不客气。 – 2013-02-20 16:14:39