我刚开始更深入地探索JavaScript Underscore库,只是想澄清一下我的想法_.reduce()
(也称为inject
和foldl
)的做法是对的。我的问题是:下面是对吗?
调用_.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
这就是ran函数返回20
的原因。是对的吗?因此_.reduceRight()
恰恰相反,从memo
+ list[ /* last element in array */ ]
开始?
感谢。
问候。
答案 0 :(得分:11)
是的,这是正确的。 reduce
回调的第一个参数表示从上一次迭代(或第一次迭代中的种子)返回的值。
回调的第二个参数是Array当前迭代的值。
因此,第一个参数是你想要达到的结果的累加器。所有迭代完成后,从_.reduce
函数返回最终值。