undercore.js-包含和减少之间的关系

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

本文关键字:之间 关系 js- 包含 undercore      更新时间:2023-09-26

有人能解释一下_.reduce函数是如何在_.control函数中工作的吗?为什么reduce函数的第三个参数为"false"?

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

尽管这是_contains的工作版本,但它不是一个非常有效的版本。它不是我在Github repo中看到的那个,也不是我在注释源中看到的另一个。但它应该起作用,以下是如何:CCD_ 3取三个参数。(好吧,有一个可选的第四个,但出于这些目的,我们可以忽略它。)第一个是要reduce的列表,第二个是reduce函数,第三个,你要问的,是累加器的初始值。

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

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

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