2015-09-14 1 views
0

on m'a demandé de changer de _.every du code en utilisant lodash:test plusieurs propriétés à l'aide _.every

//for every item in collection, check if "someProp" is true, 
//but only if "someProp2" isn't "-1". If "someProp" is true for 
//every item in collection, return true. 

$scope.areAllTrue = function() { 
    for(var i=0; i<$scope.collection.length; i++){ 
     if($scope.collection[i].someProp2 === -1) { 
      continue; 
     } 
     if(!$scope.collection[i].someProp) { 
      return false; 
     } 
    } 
    return true; 
}; 

Ainsi, suite à la lodash example de:

_.every(users, 'active', false); 

Nous obtenons:

$scope.areAllTrue = function() { 
    return _.every($scope.collection, 'someProp', true) 
}; 

Cela gère le "Pour chaque élément de la collection, vérifiez si someProp est vrai, si tout est vrai, retournez vrai. " Mais puis-je faire le "continuer" vérifier ici d'une manière ou d'une autre? Editer: Puis-je utiliser deux prédicats avec "_.every" d'une manière ou d'une autre? Comme if someProp1 === true || someProp2 === -1?

Répondre

3

_.every() peut utiliser une fonction sous-jacente:

_.every(users, function(user) { 
    return user.someProp2 === -1 || user.someProp; 
}); 

Vous pouvez aussi sauter lodash et utiliser Array.prototype.every:

users.every(function(user) { 
    return user.someProp2 === -1 || user.someProp; 
}); 
+0

Merci, je pense que c'était beaucoup plus simple que je l'ai fait être. Edit: Je ne savais pas à propos de tout - cool. Je déteste utiliser les bibliothèques quand la même chose peut être faite sans. – VSO

+0

Bienvenue, et je prends de vous la "longueur de commentaire/min" :) –

+0

@WouterHuysentruit - merci pour l'esprit sportif :) –