var data = [1, 2, 3, 5, 2, 1, 4]; // iterate over elements and filter var res = data.filter(function (v) { // get the count of the current element in array // and filter based on the count return data.filter(function (v1) { // compare with current element return v1 == v; // check length }).length == 1; }); console.log(res);
Entiendo toda la línea en este código, pero no entiendo cómo puede detectar la length==1
.
(My opinion
) Debido a que recorre cada elemento de la matriz y return boolean value
ya sea verdadero o falso, entonces, ¿cómo se puede usar para detectar la longitud?
Este código es para obtener el elemento de la matriz que solo aparece una vez en la matriz.
El retorno verdadero no es para devolver el booleano, pero cuando devuelve verdadero desde dentro de un filtro, ese elemento se agrega a la matriz resultante de la función de filtro.
El proceso aquí se llama encadenamiento de métodos. En la línea 11, primero, se aplica el filtro a la matriz de datos, luego se aplica el método .length al resultado del filtro, que será una matriz de igual longitud o menor que el número de elementos de la matriz de datos. Luego, finalmente, solo una vez que se llama al retorno, que será un valor booleano utilizado para el filtro externo.
Otro ejemplo:
function reverseString (inputString) { return inputString.split("").reverse().join() }
En el ejemplo anterior, la función regresa después de la división, luego se invierte en el resultado de la división y luego se une al resultado de la inversa. Solo se devuelve la cadena resultante final.
No pienses en ello como líneas de código. Divide cada segmento de código en su verdadero significado mi padawan
data.filter(function (v1) { // compare with current element return v1 == v; // check length })
filtra la matriz de datos para devolver una matriz de elementos de data
de modo que cada elemento sea igual a v
Al verificar si su longitud es 1, desea devolver verdadero si la matriz tiene solo 1 elemento.
Asi que,
var res = data.filter(function (v) { // return true if there is only 1 element in data which is equal to v });
Lo que básicamente significa que estamos filtrando data
y devolviendo una nueva matriz donde cada elemento es tal que solo tiene una aparición en la matriz.
La función para el filter
devuelve un valor booleano, pero el filter
en sí mismo devuelve una matriz.
Así por ejemplo:
array.filter(function(element) { return element >= 0; });
dice que la función function(element) { return element >= 0; }
se aplicará a cada elemento de la array
. Entonces, si el resultado de la función es true
, ese elemento existirá en la versión filtrada final de la array
(que es lo que devuelve la función de filter
), o no existirá si el resultado es false
.
En efecto, todos los números negativos de la array
se filtrarán porque devuelven false
.
Lo que dice su código es lo siguiente: para cada elemento en data
, filtre data
para mantener solo los elementos iguales al actual. Si esta lista filtrada tiene solo un elemento, entonces solo puede ser nuestro elemento actual. Por lo tanto, este elemento existe solo una vez y debe mantenerse en el resultado final, por lo que devolvemos true
si .length == 1
. Al final, una vez que se hace esto para cada elemento, el filter
es lo suficientemente inteligente como para convertir esos resultados de true
y false
en una matriz de los elementos que produjeron true
y omitir los que produjeron false
.