Filtrace unikátnÃch prvků pole
NechÅ¥ pole je nÄjaké pole.
VytvoÅte funkci unikát(pole), která vrátà pole obsahujÃcà vÅ¡echny různé prvky pole.
PÅÃklad:
function unikát(pole) {
/* váš kód */
}
let ÅetÄzce = ["Haré", "KrÅ¡na", "Haré", "KrÅ¡na",
"Kršna", "Kršna", "Haré", "Haré", ":-O"
];
alert( unikát(ÅetÄzce) ); // Haré, KrÅ¡na, :-O
ProjdÄme si prvky pole:
- U každého prvku ovÄÅÃme, zda výsledné pole již tento prvek obsahuje.
- Pokud je tomu tak, budeme ho ignorovat, jinak ho pÅidáme do výsledku.
function unikát(pole) {
let výsledek = [];
for (let ÅetÄzec of pole) {
if (!výsledek.includes(ÅetÄzec)) {
výsledek.push(ÅetÄzec);
}
}
return výsledek;
}
let ÅetÄzce = ["Haré", "KrÅ¡na", "Haré", "KrÅ¡na",
"Kršna", "Kršna", "Haré", "Haré", ":-O"
];
alert( unikát(ÅetÄzce) ); // Haré, KrÅ¡na, :-O
Tento kód funguje, ale má potenciálnà problém s výkonem.
Metoda výsledek.includes(ÅetÄzec) vnitÅnÄ procházà pole výsledek a porovná každý jeho prvek s ÅetÄzec, aby naÅ¡la shodu.
Jestliže tedy v poli výsledek je 100 prvků a žádný se nerovná ÅetÄzec, pak projde celé pole výsledek a provede právÄ 100 porovnánÃ. A je-li výsledek velký, napÅ. 10000, pak se vykoná 10000 porovnánÃ.
To samo o sobÄ nenà problém, jelikož JavaScriptové motory jsou velmi rychlé, takže projÃt pole 10000 prvků je otázkou mikrosekund.
My vÅ¡ak provádÃme takový test pro každý prvek pole v cyklu for.
Jestliže tedy pole.length je 10000, budeme mÃt nÄco jako 10000*10000 = 100 miliónů porovnánÃ. To je hodnÄ.
Toto ÅeÅ¡enà je tedy dobré jen pro malá pole.
PozdÄji v kapitole Mapa a množina uvidÃme, jak je optimalizovat.