¿Alguien puede explicarme qué hace exactamente esta línea de código?
function findUniq(array) { return array.find((item) => array.indexOf(item) === array.lastIndexOf(item)) }Quiero saber qué está haciendo exactamente esta línea:
return array.find((item) => array.indexOf(item) === array.lastIndexOf(item))Lo que creo que está sucediendo aquí es que para cada elemento dentro de la matriz se compara el primer índice de ese elemento con el último índice del elemento. devuelve los elementos que son iguales entre sí.
No entiendo cómo está devolviendo la matriz única.
Si tuviera que escribir esta función sería así:
return array.find((item) => array.indexOf(item) != array.lastIndexOf(item))Sin embargo, eso no funciona ya que está devolviendo el número común.
Gracias
El método Array.prototype.find() toma una función de predicado (una función que devuelve verdadero o falso según los parámetros de entrada) y luego devuelve el elemento siempre que el predicado sea verdadero.
En su caso, dado el escenario:
var array1 = [1,2,1,3,5,2,3]; var array2 = [1,2,1,3,5,5,3]; function findUnique(array){ return array.find( // The code below runs for every element of the array. // - for each element, it takes the element and checks if first position, is the same as last position in the array (item) => array.indexOf(item) === array.lastIndexOf(item) // ); } console.log("For array 1, unique item is: ",findUnique(array1)); console.log("For array 2, unique item is: ",findUnique(array2)); Array.prototype.indexOf(yourArrayElement) devuelve la posición de la primera aparición de yourArrayElement
Oh, por otro lado, Array.prototype.lastIndexOf(yourArrayElement) devuelve la posición de la última aparición de yourArrayElement
Si yourArrayElement solo existe una vez dentro de la matriz, la primera y la última posición serán las mismas y Array.prototype.find() devolverá ese elemento.
indexOf devuelve la primera posición encontrada del elemento dado en la matriz, mientras que lastIndexOf devuelve la última posición del elemento dado en la matriz.
Si indexOf === lastIndexOf , significa que el primer elemento encontrado es el mismo que el último --> el elemento es único en la matriz.
La razón por la que devuelve un número único, porque la función de find se repite desde el principio y desde el final en cada iteración, por lo que si el índice de indexOf que se repite desde el principio y lastIndexOf que se repite desde el final es igual, significa que hay no hay duplicados en la matriz junto al elemento actual.