Javascript 如何减少每次重新实现时的工作量
我整天都不知道reduce是怎么工作的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
\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行中设置的累加器
的初始值。