underscore.js _.every() 和 _.some() 没有回调

underscore.js _.every() and _.some() with no callback

对于一项作业,我正在重新创建下划线的 _.every() 和 _.some() 函数以传递一组规范。但是,我无法让函数在没有回调函数的情况下工作。这是规格(两个功能的规格相同):

 it('should work when no callback is provided', function() { 
 expect(_.some([true, true, true])).to.be.true; 
 expect(_.some([true, true, false])).to.be.true; 
 expect(_.some([false, false, false])).to.be.false; 
}

这是代码:

// Determine whether all of the elements match a truth test. 
197   _.every = function(collection, iterator) { 
198     return _.reduce(collection, function(trueCheck, item) { 
199       if (!trueCheck) {return false;} 
200       if (item === true || iterator(item)){ 
201         return true; 
202       } 
203       else return false; 
204     }, true); 
205   }; 
206 

207   // Determine whether any of the elements pass a truth test. If no iterator is 
208   // provided, provide a default one 
209   _.some = function(collection, iterator) { 
210     var isAllFalse = _.every(collection, function(item) { 
211       return !iterator(item); 
212     }); 
213     if (isAllFalse === true) { 
214       return false; 
215     } 
216     return true; 
217   }; 
218 

如有任何建议,将不胜感激,谢谢!

我会使用普通 Javascript:

var _ = _ || {};

_.every = function(collection, iterator) {
  for (var i = collection.length - 1; i >= 0; i--) {
    if (!collection[i]) return false;
  }
  return true;
};

_.some = function(collection, iterator) {
  for (var i = collection.length - 1; i >= 0; i--) {
    if (collection[i]) return true;
  }
  return false;
};

console.log(_.every([true, 'is', 1])); //true
console.log(_.every([true, 'is', false])); //false
console.log(_.some([null, '', 0, false])); //false
console.log(_.some([true, 'is', false])); //true