wasFound 在这个版本的 contains 中做了什么工作?

What work is wasFound doing in this version of contains?

在下面的代码中,我不确定 wasFound 参数是如何工作的:

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

我希望 wasFoundundefined 初始化(尽管我在评论中看到它在 false 初始化;这是怎么发生的)。我也看不到 wasFound 本身是如何更新的。

我看到很多关于 SO 的讨论都讨论了这个版本的 contains,但没有任何内容解析这个特定的部分。有帮助吗?

"wasfound" 是 reduce 的累加器值。在您的代码中,它是用 "false" 初始化的,因为这是“_.reduce”方法的第三个参数,表明在循环开始之前尚未找到 "target" 元素。然后,"reduce" 遍历集合并将当前元素分配给 "item"。在每个迭代步骤中,它检查 "wasFound" 是否为真,这表明我们已经在前一个迭代步骤中找到该元素,并且 return "true" 将该信息传递给下一个迭代。否则,我们将当前集合项与 "target" 项进行比较。如果它们具有相同的类型和值,我们将 return "true" 指示到下一次迭代,否则 "false"。这样的效果是,在遍历整个集合之后,我们知道是否包含目标元素,因为其中一个迭代步骤会将 "wasFound" 设置为 true,这就是 returned .如果未包含,则该值保持为假。

一般来说,reduce 累加器(这里是 "wasFound")设置为前一个迭代步骤的 return 值。由于第一步没有前面的步骤,因此“._reduce”的第三个参数用作初始值设定项。