Javascript 如何减少每次重新实现时的工作量

Javascript 如何减少每次重新实现时的工作量,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我整天都不知道reduce是怎么工作的 \uu0.every=函数(集合、迭代器){ 变量检查=迭代器| | |身份; var结果=\减少(收集,函数(累加器,val){ 返回累加器&&!!检查(val); },对); 返回结果; }; console.log(u.every([true,false,1,2,3,4],u.identity));//=>false。每个基本上都是一个复合的&。仅当每个元素都导致true时,结果才应为true 所以在这行代码中 return accumulator

我整天都不知道reduce是怎么工作的

\uu0.every=函数(集合、迭代器){
变量检查=迭代器| | |身份;
var结果=\减少(收集,函数(累加器,val){
返回累加器&&!!检查(val);
},对);
返回结果;
};

console.log(u.every([true,false,1,2,3,4],u.identity));//=>false
。每个
基本上都是一个复合的
&
。仅当每个元素都导致
true
时,结果才应为
true

所以在这行代码中

return accumulator && !!check(val);
累加器
是到目前为止的值

如果累加器是
true
,那么到目前为止一切正常。它将对数组的当前元素调用
check
,将结果转换为布尔值,然后返回该值。返回的值在下一步变成
累加器


如果累加器为
false
,那是因为数组中较早的部分返回了
false
。这意味着我们已经失败了,不需要继续检查阵列的其余部分。即使数组中稍后的内容返回
true
也无所谓。因此,此表达式将返回
false
,甚至不必调用
check

如果累加器为
true
,则调用
check()
,这是
.reduce()
回调的返回值。如果累加器为
false
,则不会调用
check()
,并返回
false
。reduce函数本质上是在计算
(((((((true&&!!true)&!!false)&&!!1)&!!2)&!!3)&!!4
,其中第一个
为真
是在第5行中设置的
累加器
的初始值。