Node.JS Dizi Tekilleştirme

Merhabalar, Node.JS yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda dizi tekilleştirme işlemini anlatacağım. Hadi başlayalım !
Dizi tekilleştirme, bir dizi içerisinde aynı değerden birden fazla olması durumunda bunları tek hale getirme işlemidir. Yazılım dünyasındaki adı ise duplicate. Bu işlem için 3 tane yolumuz var, ben üçünü de anlatacağım, artık siz hangisini kullanmak isterseniz onu kullanırsınız 🙂 Şimdi sırayla her birine bakalım.
Set Kullanmak
Set, Javascript’ten gelen bir şey ve dizi mantığında veri tutan bir nesne fakat diziden farkı her veriden bir tane olabilir. Örneğin [1,2,3,5,5,6] gibi bir dizi olabiliyorken Set olamaz, [1,2,3,5,6] şeklinde olabilir. Siz var olan bir veriden bir daha eklemek istediğinizde ekleme yapmaz. İşte bizde diziden Set’e geçiş yaparak tekrarlı veriyi teke düşürebiliriz.
Set’in güzel bir yanı da doğrudan dizi içerisinden oluşturulabiliyor. Bunun için constructor metoduna dizi göndermemiz yeterli oluyor. E biz diziden Set’e geçiş yaparsak veri tipimiz Set olacak ve örneğin dizi isteyen fonksiyonları kullanamayacağız. O zamanda Set’ten diziye geçiş yapmamız gerekecek. İkisi arasındaki geçişler çok kolay bir şekilde yapılıyor ve işin güzel yanı bu bahsettiğim tüm her şeyi tek satırda yapabiliyoruz. Örnek olarak bir tane dizi oluşturalım ve bunu tekilleştirelim.
const dizi = [1, 2, 3, 5, 5, 7, 1, 5, 8, 10, 10];
const tekillestirilmisDizi = [...new Set(dizi)];
İlk satırda tekrarlı veri içeren bir dizi oluşturduk ve ikinci satırda tekilleştirme işlemi yaptık. Gördüğünüz üzere tekilleştirme işlemini yaptığımız kod diziyi oluştururken yazdığımız koddan daha kısa 🙂
lodash Kullanmak
lodash, üçüncü parti bir Node.JS paketi ve dizi işlemleri için gerçekten çok güzel bir paket. Ben, dizi işlemleriyle ilgili bir çok işlemi yapmak için lodash kullanıyorum. Üçüncü parti yani Node.JS kurulumu ile gelen paketlerden olmadığı için kurmamız gerekecek. Bunun için terminali açarak
npm i lodash
komutunu çalıştırmamız gerekiyor. Bu komutun ardından NPM, lodash paketini indirecek ve projemize dahil edecektir.
Her Node.JS paketinde olduğu gibi lodash’i de kullanabilmek için projeye dahil etmemiz gerekiyor. Bunun için kod yazmak istediğimiz Javascript dosyasını (örneğin index.js) açarak
const lodash = require('lodash');
kod satırını eklememiz gerekiyor.
lodash ile diziyi tekilleştirmek için unique() fonksiyonunu kullanıyoruz. Bu fonksiyon static yani bulunduğu sınıfın yeni bir nesnesi oluşturulmadan erişilebilen fonksiyonlardan ve birinci parametrede dizi, ikinci parametrede ise fonksiyon istiyor. Birinci parametredeki dizi zorunlu, ikinci parametredeki fonksiyon opsiyonel yani zorunlu değil.
İkinci parametredeki fonksiyonun amacı; object dizilerinde işlem yapmak. Yani dizi içerisinde JSON nesneniz var ve bu JSON nesnesinin belirli bir key değerine göre tekilleştirme yapmak istiyorsanız ikinci parametrede bunu belirtiyorsunuz. Belirtmemeniz durumunda dizi elemanının tümüne bakıyor ve buna göre tekilleştirme işlemi yapıyor.
Şimdi iki örnek yapalım ve hem object dizileri, string yada number dizilerinin tekilleştirilme işlemini gösterelim.
const numberDizisi = [1, 2, 3, 5, 5, 7, 1, 5, 8, 10, 10];
const tekillestirilmisNumberDizisi = lodash.unique(numberDizisi);
const objectDizisi = [
{ id: 1, resim: 'a.jpg', aciklama: 'Güzel resim' },
{ id: 2, resim: 'b.jpg', aciklama: 'Güzelmiş' },
{ id: 3, resim: 'a.jpg', aciklama: null },
{ id: 4, resim: 'a.jpg', aciklama: 'Güzel manzara' }
];
const tekillestirilmisObjectDizi = lodash.unique(objectDizisi, function(obj) {
return obj.resim;
});
numberDizisi dizisini tekilleştirirken unique() fonksiyonuna tek parametre gönderdik ve bu sayede doğrudan elemanlar üzerinden tekilleştirme işlemini yaptık. objectDizisi dizisini tekilleştirirken ikinci parametreye bir dizi verdik ve bu dizi sadece fonksiyona gelen değerin resim değerini geri döndürüyor. İşte bu geri dönüş sayesinde lodash’a, bu dizinin içerisindeki objectin resim değerlerine dikkat et ve bunlardan tekrar edenleri tekilleştir dedik. Sadece tek boyutlu objectler değil, iç içe istediğiniz kadar derinlikteki object nesnelerinde tekilleştirme yapabiliriz.
Kendi Fonksiyonumuzu Yazmak
Hazır paket yada özellik kullanmanın yanı sıra kendi fonksiyonumuzu da yazmak isteyebiliriz. Özellikle algoritma kurma yeteneğimizin gelişmesi için kendi kodumuzu yazmak önemli olmakta. Tabi ki Set yada lodash kullanmayın demiyorum ama alıştırma yapmak için kendi kodunuzu yazmaya özen gösterebilirsiniz.
Kendi kodumuzu yazarak tekilleştirme yapmak istiyorsak yol haritamız şöyle olacaktır;
- Boş bir dizi oluştur,
- Tekilleştirme yapmak istediğin dizi içerisinde gez,
- Her elemanı yeni oluşturulan dizinin içerisinde var olup olmadığını kontrol et ve yoksa ekle, varsa atla
- İşlemi bitir
Bu yol haritasına göre kodumuzu yazalım;
const dizi = [1, 2, 3, 5, 5, 7, 1, 5, 8, 10, 10];
const tekillestirilmisDizi = [];
for(const eleman of dizi) {
if (tekillestirilmisDizi.indexOf(eleman) == -1){
tekillestirilmisDizi.push(eleman);
}
}
Evet gördüğünüz üzere 4 adımda söylediğim yol haritasını süslü parantezleri saymazsak 5 satırda yazmış olduk 🙂
Yazdığımız ve anlattığım konuları şöyle bir gözden geçirecek olursak; yazılan kodun giderek arttığını görebilirsiniz fakat lodash ve Set konularına bakarsanız aslında son olarak yazdığımız koda çok benzer yapıda bir yapının var olduğunu görebilirsiniz. Yani aslında birileri aynı şeyleri yapmış ve örneğin lodash paketi altına ekleyip yazılımcıların daha hızlı işlem yapmaları için hizmete sunmuş.
Evet bu yazımızda bu kadardı, tüm Node.JS yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.