Je veux comparer chaque chaîne d'un tableau avec une chaîne donnée. Ma mise en œuvre actuelle est:
function startsWith(element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith);
Cette fonction simple fonctionne, mais uniquement parce que pour le moment, wordToCompare est défini comme une variable globale, mais bien sûr, je veux éviter cela et le passer en paramètre. Mon problème est que je ne sais pas comment définir startsWith () afin qu'il accepte un paramètre supplémentaire, car je ne comprends pas vraiment comment les paramètres par défaut qu'il prend sont passés. J'ai essayé toutes les différentes façons dont je peux penser et aucune d'elles ne fonctionne.
Si vous pouviez également expliquer comment les paramètres passés aux fonctions de rappel `` intégrées '' (désolé, je ne connais pas de meilleur terme pour ceux-ci) fonctionnent, ce serait génial
la source
Le deuxième paramètre de filtre définira cela à l' intérieur du rappel.
Vous pouvez donc faire quelque chose comme:
la source
{one: 'haha', two:'hoho'}
Pour ceux qui recherchent une alternative à ES6 utilisant les fonctions fléchées, vous pouvez effectuer les opérations suivantes.
La version mise à jour utilisant comprend :
la source
la source
Vous pouvez utiliser la fonction de flèche à l'intérieur d'un filtre, comme ceci:
Fonctions fléchées sur MDN
la source
Pour tous ceux qui se demandent pourquoi leur fonction de grosse flèche est ignorée
[, thisArg]
, par exemple pourquoi["DOG", "CAT", "DOG"].filter(animal => animal === this, "DOG")
Retour[]
c'est parce
this
qu'à l'intérieur de ces flèches, les fonctions sont liées lorsque la fonction est créée et sont définies sur la valeur dethis
dans la portée englobante plus large, donc l'thisArg
argument est ignoré. J'ai contourné cela assez facilement en déclarant une nouvelle variable dans une portée parent:let bestPet = "DOG"; ["DOG", "CAT", "DOG"].filter(animal => animal === bestPet); => ["DOG", "DOG"]
Voici un lien vers d'autres lectures: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_separate_this
la source
basé sur la réponse oddRaven et https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
je l'ai fait de manière différente. 1) en utilisant la manière de fonction. 2) en utilisant la manière en ligne.
la source
Il existe un moyen simple d'utiliser la fonction de filtre, d'accéder à tous les paramètres et de ne pas trop la compliquer.
À moins que thisArg du rappel ne soit défini sur un autre filtre de portée, il ne crée pas sa propre portée, et nous pouvons accéder aux paramètres dans la portée actuelle. Nous pouvons définir 'this' pour définir une portée différente afin d'accéder à d'autres valeurs si nécessaire, mais par défaut, elle est définie sur la portée à partir de laquelle elle est appelée. Vous pouvez voir que cela est utilisé pour les portées angulaires dans cette pile .
L'utilisation d'indexOf va à l'encontre de l'objectif du filtre et ajoute plus de surcharge. Le filtre traverse déjà le tableau, alors pourquoi devons-nous le parcourir à nouveau? Nous pouvons plutôt en faire une simple fonction pure .
Voici un scénario de cas d'utilisation dans une méthode de classe React où l'état a un tableau appelé items , et en utilisant un filtre, nous pouvons vérifier l'état existant:
la source