Bonjour,
voici un code donné:
C'est dans une app Angularjs, mais peu importe, c'est un probleme de javascript.
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; };
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
Partager