问题描述
我一直对_.reduce整天在这里工作感到困惑。
据我所知_.reduce遍历集合,对于每个元素,在数组中的每个元素上调用iterator(accum,val),然后返回累加器,但我不知道在哪一行4正在执行:返回累加器&& !! check(val);。为什么它不检查false,将其设置为累加器,然后检查1并将其设置为累加器,然后继续处理数组的其余部分,直到达到4,这意味着最后一个累加器为true?抱歉,如果这样做没有道理。
解决方法
.every
本质上是复合词&&
。如果每个元素也都产生true
,则结果应仅为true
。
所以在这一行代码中...
return accumulator && !!check(val);
... accumulator
是到目前为止的值。
如果累加器为true
,那么到目前为止一切都很好。它将在数组的当前元素上调用check
,将结果转换为布尔值,然后将其返回。返回值将成为下一步的accumulator
。
如果累加器为false
,那是因为数组中较早的内容返回了false
。这意味着我们已经失败了,不需要继续检查数组的其余部分。即使数组后面的内容返回true
也没关系。因此,该表达式将返回false
,甚至不打扰check
。