Node.JS

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.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu