encontrar - Diferencia entre findIndex() y some() en JavaScript
¿La diferencia es solo que mientras some() devuelve verdadero si hay al menos un elemento que pasa la prueba en la función de devolución de llamada, findIndex() devuelve el índice del primer elemento que supera la prueba?
¿O es que uno es más óptimo o hay más de lo que entiendo, porque, si esa es la única diferencia, entonces podría simplemente obtener el índice de findIndex() y comprobar si es -1 o no.
let foo = [
{
'animal':'dog'
},
{
'animal':'cat'
},
{
'animal':'cow'
},
]
foo.find( obj => obj.animal === 'cat' )
{animal: "cat"}
foo.some( obj => obj.animal === 'cat' )
true
Respuesta #1
findIndex y some son de hecho muy similares y puedes usar fácilmente findIndex en lugar de some. Además, find tiene una especificación similar. Pero no puedes usarlo fácilmente para reemplazar some ya que el valor de retorno de find es el elemento encontrado o undefined, lo cual no puedes distinguir de un elemento real.
Sin embargo, hay una pequeña diferencia entre findIndex/find y some. Vea la especificación de some:
callbackfnse llama solo para los elementos del arreglo que realmente existen; no se llama para los elementos faltantes del arreglo.
Ve este ejemplo:
new Array(1).findIndex(() => console.log('called')); // prints 'called' once
new Array(1).some(() => console.log('called')); // does not print anything
Sin embargo, eso en realidad no debería ser relevante en la mayoría de las aplicaciones.
La razón por la que existen esas funciones y por la que deberías usarlas tal como se especificaron es la legibilidad. Siempre deberías esforzarte por escribir código legible/mantenible. Por supuesto, puedes escribir [].findIndex(...) !== -1 en lugar de [].some(...), pero lo último es claramente más legible ya que tiene una mejor semántica de lo que hace.
