Quiero comparar cada cadena en una matriz con una cadena determinada. Mi implementación actual es:
function startsWith(element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith);
Esta función simple funciona, pero solo porque en este momento wordToCompare se está configurando como una variable global, pero, por supuesto, quiero evitar esto y pasarlo como un parámetro. Mi problema es que no estoy seguro de cómo definir startsWith (), por lo que acepta un parámetro adicional, porque realmente no entiendo cómo se pasan los parámetros predeterminados que toma. He intentado todas las formas diferentes en las que puedo pensar y ninguna de ellas funciona.
Si también pudiera explicar cómo funcionan los parámetros pasados a las funciones de devolución de llamada 'integradas' (lo siento, no conozco un término mejor para estas), sería genial
fuente
El segundo parámetro de filtro establecerá esto dentro de la devolución de llamada.
Entonces podrías hacer algo como:
fuente
{one: 'haha', two:'hoho'}
Para aquellos que buscan una alternativa a ES6 usando las funciones de flecha, pueden hacer lo siguiente.
La versión actualizada que usa incluye :
fuente
fuente
Puede usar la función de flecha dentro de un filtro, como este:
Funciones de flecha en MDN
fuente
Para cualquiera que se pregunte por qué se ignora su función de flecha gruesa
[, thisArg]
, por ejemplo, por qué["DOG", "CAT", "DOG"].filter(animal => animal === this, "DOG")
devoluciones[]
es porque
this
dentro de esas funciones de flecha están vinculadas cuando se crea la función y se establecen en el valor dethis
en el ámbito abarcador más amplio, por lo que elthisArg
argumento se ignora. Lo solucioné con bastante facilidad al declarar una nueva variable en un ámbito principal:let bestPet = "DOG"; ["DOG", "CAT", "DOG"].filter(animal => animal === bestPet); => ["DOG", "DOG"]
Aquí hay un enlace para leer más: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_separate_this
fuente
basado en la respuesta de oddRaven y https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Lo hice de 2 formas diferentes. 1) usando la forma de función. 2) usando forma en línea.
fuente
Hay una manera fácil de usar la función de filtro, acceder a todos los parámetros y no complicarlo demasiado.
A menos que el thisArg de la devolución de llamada se establezca en otro ámbito, el filtro no crea su propio ámbito y podemos acceder a los parámetros dentro del ámbito actual. Podemos configurar 'esto' para definir un alcance diferente para acceder a otros valores si es necesario, pero de forma predeterminada se establece en el alcance desde el que se llama. Puede ver que esto se usa para ámbitos angulares en esta pila .
El uso de indexOf está anulando el propósito del filtro y agrega más gastos generales. El filtro ya está pasando por la matriz, entonces, ¿por qué tenemos que repetirlo de nuevo? En su lugar, podemos convertirlo en una función pura simple .
Aquí hay un escenario de caso de uso dentro de un método de clase React donde el estado tiene una matriz llamada elementos , y al usar el filtro podemos verificar el estado existente:
fuente