Filtrar elementos nicos de un array
Partiendo del array arr.
Crea una funcin unique(arr) que devuelva un array con los elementos que se encuentran una sola vez dentro de arr.
Por ejemplo:
function unique(arr) {
/* tu cdigo */
}
let strings = ["Hare", "Krishna", "Hare", "Krishna",
"Krishna", "Krishna", "Hare", "Hare", ":-O"
];
alert( unique(strings) ); // Hare, Krishna, :-O
Recorramos los elementos dentro del array:
- Para cada elemento vamos a comprobar si el array resultante ya tiene ese elemento.
- Si ya lo tiene, ignora. Si no, agrega el resultado.
function unique(arr) {
let result = [];
for (let str of arr) {
if (!result.includes(str)) {
result.push(str);
}
}
return result;
}
let strings = ["Hare", "Krishna", "Hare", "Krishna",
"Krishna", "Krishna", "Hare", "Hare", ":-O"
];
alert( unique(strings) ); // Hare, Krishna, :-O
El cdigo funciona, pero tiene un problema potencial de desempeo.
El mtodo result.includes(str) internamente recorre el array result y compara cada elemento con str para encontrar una coincidencia.
Por lo tanto, si hay 100 elementos en result y ninguno coincide con str, entonces habr recorrido todo el array result y ejecutado 100 comparaciones. Y si result es tan grande como 10000, entonces habr 10000 comparaciones.
Esto no es un problema en s mismo, porque los motores JavaScript son muy rpidos, por lo que recorrer 10000 elementos de un array solo le tomara microsegundos.
Pero ejecutamos dicha comprobacin para cada elemento de arr en el loop for.
Entonces si arr.length es 10000 vamos a tener algo como 10000*10000 = 100 millones de comparaciones. Esto es realmente mucho.
Por lo que la solucin solo es buena para arrays pequeos.
Ms adelante en el captulo Map y Set vamos a ver como optimizarlo.