Benzersiz dizi elemanlarını bulan fonksiyonu yazınız.
Diyelim ki arr adında bir diziniz var.
benzersiz(arr) adında bir fonksiyon yazın ve bu fonksiyon arr içinde bulunan benzersiz elemanları dönsün.
ÃrneÄin:
function benzersiz(arr) {
/* your code */
}
let kullanicilar = ["Emine", "Muzaffer", "Fatma", "Kanako",
"Kanako", "Muzaffer", "Fatma", "Kanako", ":-O"
];
alert( benzersiz(kullanicilar) ); // Emine, Muzaffer, Fatma, Kanako, :-O
Dizinin elemanlarını dolaÅacak olursak:
- Her eleman için sonuç dizisinde bu elemanın olup olmadıÄınına bakılacak.
- EÄer var ise, görmezden gelinecek, diÄer türlü sonuç dizisine eklenecek.
function benzersiz(arr) {
let sonuc = [];
for (let str of arr) {
if (!sonuc.includes(str)) {
sonuc.push(str);
}
}
return sonuc;
}
let kullanicilar = ["Emine", "Muzaffer", "Fatma", "Kanako",
"Kanako", "Muzaffer", "Fatma", "Kanako", ":-O"
];
alert( benzersiz(kullanicilar) ); // Emine, Muzaffer, Fatma, Kanako, :-O
Kod çalıÅacaktır, fakat performans problemi yaratabilir.
sonuc.includes(str) sonuc dizisini tamamen dolanır ve str ile karÅılaÅtırır.
Diyelimki sonuc dizisinde 100 tane eleman var ve str ile eÅleÅen yok. sonuc dizisi dolanılacak ve kesinlikle 100 defa karÅılaÅtırma yapılacaktır. EÄer sonuc dizisi 10000 gibi elemana sahip ise bu karÅılaÅtırma 10000 olacaktır.
Aslında problem bu deÄildir. JavaScript motoru 10000 karÅılaÅtırmayı mikrosaniyeler içerisinde yapabilir.
Asıl sorun bu testlerin arrâin her bir elemanı için yapılmasıdır.
Yani arr.length 10000 olduÄundan dolayı biz 10000*10000 = 100 milyon karÅılaÅtırma olmaktadır.
Bundan dolayı bu çözüm az elemana sahip diziler için kullanılabilir.
Bu optimizasyonu Map, Set, WeakMap ve WeakSet bölümünde göreceksiniz.
function benzersiz(arr) {
let sonuc = [];
for (let str of arr) {
if (!sonuc.includes(str)) {
sonuc.push(str);
}
}
return sonuc;
}