2015-09-10 2 views
1

Для выполнения задания, я работаю над повторным созданием функций _.every() и _.some() подчеркивания для передачи набор спецификаций. Однако я не могу заставить функции работать без функции обратного вызова. Вот спецификации (спецификации является одинаковым для обеих функций):underscore.js _.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 

Любой совет будет весьма признателен, спасибо!

+0

Что именно проблема? Как именно это «не работает»? –

+0

Привет, Феликс, я не совсем уверен, но мои функции, как написано, не проходят проверку спецификаций, работают ли они, если функция обратного вызова не предоставляется. – joanx737

+1

Первое, что нужно сделать - это отладить ваш код. Что вы сделали в этом отношении? В любом случае, посмотрите на 'item === true || итератор (элемент) 'и подумайте о том, что он делает. –

ответ

0

Я хотел бы использовать простой 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

Смежные вопросы