Filtrer unikke array-medlemmer
Lad arr vre et array.
Opret en funktion unique(arr), der skal returnere et array med unikke elementer fra arr.
For eksempel:
function unique(arr) {
/* din kode */
}
let strings = ["Hare", "Krishna", "Hare", "Krishna",
"Krishna", "Krishna", "Hare", "Hare", ":-O"
];
alert( unique(strings) ); // Hare, Krishna, :-O
Lad os gennemg array-elementerne:
- For hvert element tjekker vi, om det resulterende array allerede indeholder det element.
- Hvis det er tilfldet, ignorerer vi det, ellers tilfjer vi det til resultatet.
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
Koden virker, men der er et potentielt ydelsesproblem i den.
Metoden result.includes(str) gennemgr internt arrayet result og sammenligner hvert element med str for at finde et match.
S hvis der er 100 elementer i result og ingen matcher str, vil den gennemg hele result og lave prcis 100 sammenligninger. Og hvis result er stort, som 10000, vil der vre 10000 sammenligninger.
Det er ikke et problem i sig selv, fordi JavaScript-motorer er meget hurtige, s det at gennemg et array med 10000 elementer kun tager mikrosekunder.
Men vi laver sdan en test for hvert element i arr i for-lkken.
S hvis arr.length er 10000, vil vi have noget i retning af 10000*10000 = 100 millioner sammenligninger. Det er meget.
S lsningen er kun god til sm arrays.
Senere i kapitlet Map og Set vil vi se, hvordan man optimerer det.
NB: I moderne JavaScript kan vi bruge en Set til at gre det samme p en mere effektiv mde.