Noyob qator a'zolarini filtrlang
Keling, arr massiv boâlsin.
arr ning noyob elementlari boâlgan massivni qaytarishi kerak boâlgan unique(arr) funktsiyasini yarating.
Masalan:
function unique(arr) {
/* sizning kodingiz */
}
let strings = [
"Hare",
"Krishna",
"Hare",
"Krishna",
"Krishna",
"Krishna",
"Hare",
"Hare",
":-O",
];
alert(unique(strings)); // Hare, Krishna, :-O
Keling, massiv elementlari boâylab yuraylik:
- Har bir element uchun, natijada olingan massivda ushbu element mavjudligini tekshiramiz.
- Agar shunday boâlsa, unda eâtibor bermang, aks holda natijalarga qoâshing.
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
Kod ishlaydi, lekin unda potentsial ishlash muammosi mavjud.
result.include(str) massivning ichida yuradi va result moslikni topish uchun har bir elementni str bilan taqqoslaydi.
Shunday qilib, agar natija da 100 element boâlsa va hech kim str ââga toâgâri kelmasa, u butun natija da yuradi va toâliq 100 taqqoslashni amalga oshiradi. Agar natija 10000 kabi katta boâlsa, u holda 10000 taqqoslash boâladi.
Bu oâz-oâzidan muammo emas, chunki JavaScript-ni interpretatorlari juda tez, shuning uchun 10000 lik massivdan yurish mikrosaniyadagi masala.
Ammo biz arr ning har bir elementi uchun for tsiklida shunday test oâtkazamiz.
Shunday qilib, agar arr.length 10000 boâlsa, bizda 10000 * 10000 = 100 million taqqoslash kabi narsa boâladi. Bu juda koâp.
Shunday qilib, yechim faqat kichik massivlar uchun foydalidir.
Keyinchalik "map-set-weakmap-weakset" maqolasi topilmadi bobida biz uni qanday qilib optimallashtirishni koârib chiqamiz.