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

标签 javascript underscore.js reduce contain

任何人都可以解释 _.reduce 函数如何在 _.contain 函数中工作吗? 为什么reduce函数的第三个参数是“false”?

_.contains = 函数(集合,目标){ 返回 _.reduce(集合, 函数(wasFound, 项目) { 如果(被发现){ 返回真; } 返回项目 === 目标; }, 错误的); };

最佳答案

尽管这是 _contains 的一个工作版本,但它并不是一个非常高效的版本。这不是我在 Github repo 中看到的那个或者我在 annotated source 中看到的不同的一个。但它应该可以工作,方法如下: reduce 采用三个参数。 (嗯,有一个可选的第四个,但出于这些目的,我们可以忽略它。)第一个是要减少的列表,第二个是减少函数,第三个是您要问的,是初始值累加器。

reduce 在第一个向减少函数传递两个值之后的每个步骤:上一步的输出和列表中的下一项。该函数的作用是返回下一个值,该值在列表末尾也是最终输出。但第一步没有传入任何先前的值。这就是第三个参数的用途;它用于启动该过程。因此,对于此 contains 函数,第一步的假想先前值为 false。在每个步骤中,该函数都会检查之前的值。如果为 true,则该函数仅返回 true。如果正在测试的列表值与搜索值匹配,则返回true。否则,它返回false

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

我之所以说这效率较低,是因为我们很可能知道列表包含检查第一项时的值。提到的其他实现仅在此时返回 true 。这个继续处理整个列表。当然,它实际上并没有测试更多的值,因为它只是一路上继续返回 true 值,但如果列表很长,当我们预先知道答案时,它仍然相当浪费。

关于javascript - Underscore.js---_.contains和_.reduce的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28402509/

相关文章:

javascript - 如何使用 JQUERY 在 textarea 中添加值

Python:理解reduce()'s '初始化器'参数

javascript - 正确实现 Backbone 比较器

javascript - 将主干获取/初始化变量传递给 View

javascript - 使用 underscore.js 比较两个具有未定义值的对象

javascript - 使用reduce方法消除重复的数字

javascript - 将数组中对象的最大值显示为两个最大值

javascript - 如何检查表单中是否至少选中了一个复选框?

javascript - 我可以为一系列结果制作 stub 吗? "sinon.stub().callsFake(()=>{})"断言错误 : NaN

javascript - 如何从数组中随机化句子长度