Bonjour,
voici un code donné:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$scope.mySearch = function (item) {
    var searchTerms = ['word1' 'word2'];
    var fields = ['firstName', 'lastName', 'email', 'phone', 'fax'.
                  'category', 'subCat', 'company', 'street', 'zip',
                  'state', 'city', 'country'];
 
    var allMatch = searchTerms.every(function (word) {
        return fields.some(function (field) {
               return item[field].toLowerCase().indexOf(word) > -1;
        });
    });
 
    return allMatch;
};
C'est dans une app Angularjs, mais peu importe, c'est un probleme de javascript.
Bref, "item" est une liste d'objets sur lequel angular iterate avec ngRepeat. Chaque objet de la liste a un field "firstName", "lastName".... etc etc

Ce que ce code fait, c'est retourner une liste de objets qui ont dans leurs fields, au moins "Word1" ET "Word2" (de "searchTerms"). Donc les objets retournés contiennent les deux mots, mais peu importe dans quel field.

Mon probleme est que je ne comprends pas comment ce code accompli ce miracle :/.
Je comprend comment fonctionne every() et some() séparément: ils evaluent to true or false selon que tous les elements soient true, ou seulement certain, mais comment à partir de la, ce code peut il retourner dans allMatch une liste d'objets, et pas une liste de "true" ou "false" ? En d'autre termes je comprend pas comment ce code pioche dans "item" pour retourner les objets correspondants au filtre avec des "true" ou des "falses" ??

Si quelqu'un peut m'expliquer, merci