filter
ne retourne pas un booléen, il renvoie un tableau contenant des éléments du tableau d'origine. Il décide quels éléments inclure dans le résultat en appelant une fonction que vous fournissez sur chaque élément du tableau. Cette fonction retourne un booléen: si c'est vrai, cet élément est inclus dans le résultat. Les arguments de la fonction sont l'élément (appelé item
dans votre fonction) et sa position dans le tableau (appelé pos
).
Cette fonction utilise indexOf()
pour trouver la position du premier élément du tableau qui a la même valeur que l'élément qui lui a été donné. Si cette position est la même que la position qui lui a été donnée, alors cet élément doit être la première occurrence de cette valeur dans le tableau, donc il retourne true
et l'élément sera inclus dans le résultat. Si les positions sont différentes, cet élément doit être un doublon plus tard, de sorte qu'il renvoie false
et l'élément n'est pas inclus dans le résultat. Le résultat final est que seule la première copie de chaque valeur est incluse dans le résultat du filtrage, ce qui signifie qu'ils sont tous uniques.
Par exemple, supposons que le tableau est:
["a", "b", "a", "c"]
Sur la première itération, item = "a"
et pos = 0
. a.indexOf(item)
renvoie 0
, et la fonction renvoie 0 == 0
, qui est true
, donc item
est inclus dans le résultat. Sur la deuxième itération, item = "b"
et pos = 1
. a.indexOf(item)
renvoie 1
et la fonction renvoie 1 == 1
, qui correspond à true
, de sorte que item
est inclus dans le résultat. Pour la troisième itération, item == "a"
et pos = 2
. a.indexOf(item)
renvoie 0
et la fonction renvoie 0 == 2
, qui est false
, donc item
est et non inclus dans le résultat. Sur la quatrième itération, item = "c"
et pos = 3
. a.indexOf(item)
renvoie 3
, et la fonction renvoie 3 == 3
, qui est true
, donc item
est inclus dans le résultat.
Le résultat final est que les éléments des première, deuxième et quatrième itérations sont inclus dans le résultat, qui est ["a", "b", "c"]
.
Avez-vous lu la documentation de la fonction 'filter'? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter Il explique quels sont les arguments de la fonction de rappel. – Barmar
Le filtre ne retourne pas un booléen, il renvoie un tableau filtré. Si le callback renvoie 'true', alors item est inclus dans le résultat, sinon false. Dans ce cas, le prédicat est - est-ce que l'index actuel de l'élément ('pos') est le même que l'index de l'élément dans le tableau. Sinon, l'élément est un doublon, et nous serons filtrés. Lisez un peu à propos de [Array # filter] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter). –