Javascript’te İki Array veya Objenin Birbirinin Aynı Olması Kontrolü

Bu yazıda iki array veya obje değişkenenin birbirinin aynısı olup olmadığının kontrolünü Javascript'te nasıl verimli bir şekilde gerçekleştirebiliriz sorusuna cevap arayacağız.

İsterseniz öncelikle bir array değişkenini göz önüne alalım.

//1. array
var arr1 = ["patates", "domates", "patlıcan"];
//2. array
var arr2 = ["patates", "domates", "patlıcan"];

Bu örnekte 1. ve 2. array birbirinin aynısı mıdır? İlk düşünülebilecek şey (arr1 == arr2) mantıksal bloğu oluyor. Fakat bu kullanılabilir bir syntax değil. Bunun temel sebebi, arr1 ve arr2'nin temsil ettiği verilerin bir tür yapıya sahip olmasıdır.

NOT: Javascript'teki mantık operatörleri, sayısal ve string değişkenlerinin birbiriyle ilişkilerini kontrol edebilir.

Çıkarım: Bu durumda kontrolünü yapacağımız veri yapısının string veya sayı formuna indirgenmiş olması gerekiyor.

NOT: Javascript'te birbirine eşit sayıda elemanı olan ve sırası ile her elemanı birbirine eşit olan arrayler birbirine eşittir.

Çıkarım: Her elemanın birbirinine eşitliği kontrol edilirse, 2 array'in birbirine eşit olduğu belirlenebilir.

Buna göre ilk akla gelen çözüm; 2 array'in eleman sayısı birbirine eşitse, bir döngü ile elemanların her birinin birbirine eşitliğini kontrol et;

var arr1 = ["patates", "domates", "patlıcan"];
var arr2 = ["patates", "domates", "patlıcan"];

function EsitMi(arr1, arr2){
   if(arr1.length == arr2.lenght){
   var i = 0;
   var durum = true;
      while(i < arr1.length){
        if(arr1[i] != arr2[i]){
          durum = false;
          break;
        }
      }
   }else{
     durum = false;
   }
   return durum;
}

Buna göre arraylerin birbirine eşit olduğunu kabul ederek, karşılıklı iki eleman değerinin birbirine eşit olmadığı durumda, döngüyü durdurarak durum değişkenini false değerine çevirdik.

Obje için, objenin eleman yapısını da biliyor olmanız ve buna göre bir map çıkartmanız gerekiyor. Bu yaklaşımı obje için uygulamak da geliştirici açısından verimsiz olacaktır.

Buna ek olarak büyük ölçekli projelerde bazen çalıştığınız arrayler çok daha fazla elemana sahip olabiliyor, bu da brute-force yaklaşımının kullanımını performans açısından çok daha verimsiz yapıyor.

Verimli Yaklaşım

Bu soruna verimli bir çözüm ise, Javascript Object Notation (JSON) kullanmak. Sorunun çözülmesinde Javascript'in sunduğu baştaki olanak, iki değişkenin string yapısında olması gerektiğiydi.

JSON kullarak birbirine eşitlik durumunu öğrenemek istediğimiz obje veya array elementini notasyon olarak string yapısına çevirip biribirleri ile karşılaştırabiliriz. Şöyle ki;

var arr1 = ["patates", "domates", "patlıcan"];
var arr2 = ["patates", "domates", "patlıcan"];

function EsitMi(arr1, arr2){
   if(JSON.stringify(arr1) == JSON.stringify(arr2)){
      return true;
   }else{
      return true;
   }
}

İkincil çözümümüzdeki arr1 ve arr2 değişkenleri obje veya array olabilir, hatta herhangi bir Javascript değişken yapısı bu fonksiyonda jenerik olarak kullanılabilir.

Yorumları Göster veya Yeni Yorum Yaz