Underscore.js---_.contains和_.reduce的关系

Underscore.js--- the relationship between _.contains and _.reduce

谁能解释一下 _.reduce 函数在 _.contain 函数中的工作原理? 为什么reduce函数的第三个参数是"false"?

_.contains = function(collection, target) { return _.reduce(collection, function(wasFound, item) { if (wasFound) { return true; } return item === target; }, false); };

虽然这是 _contains 的工作版本,但效率不是很高。这不是我在 Github repo or the different one I see in the annotated source 中看到的那个。但它应该有效,方法如下: reduce 接受三个参数。 (好吧,有一个可选的第四个,但出于这些目的我们可以忽略它。)第一个是要减少的列表,第二个是减少函数,第三个,你问的那个,是的初始值一个累加器。

reduce 在第一个传递归约函数后的每一步两个值:上一步的输出和列表中的下一项。该函数的工作是 return 下一个值,列表末尾的值也是最终输出。但是第一步没有传过去的值。这就是第三个参数的作用;它用于启动该过程。所以对于这个 contains 函数,第一步的假想前值是 false。在每一步中,该函数都会检查先前的值。如果是true,函数就是returns true。如果正在测试的列表值与搜索值匹配,则它 returns true。否则,它 returns false.

请注意,此规则意味着一旦您点击 true,它将保持 true

我说这效率不高的原因是我们很可能知道列表包含检查第一项的值。其他实现在这一点上简单地提到了 return true。这个继续处理整个列表。当然它实际上并没有测试更多的值,因为它只是继续 return true 值,但是如果列表很长,当我们预先知道答案时它仍然相当浪费.