Emre

WFN Üye
Konular
1,662
Mesajlar
1,758
Çözüm
0
Ticaret Puanı
0
Üyelik
9 Ay 4 Gün
Konum
Samsun
Web Sitesi
Var
Alanı
WordPress Uzm.
1/1
Konu sahibi
Bir dizide birden fazla kez geçen değerleri bulmak için daha önce görülen değerleri Set içinde tutabilirsiniz. Aşağıdaki kod tekrar eden her değeri sonuç dizisine yalnızca bir kez ekler; ayrıca her değerin kaç kez geçtiğini de hesaplar:

JavaScript:
const dizi = ["elma", "armut", "elma", "kiraz", "armut", "elma"];
const sayac = new Map();

for (const deger of dizi) {
  sayac.set(deger, (sayac.get(deger) ?? 0) + 1);
}

const tekrarEdenler = [...sayac]
  .filter(([, adet]) => adet > 1)
  .map(([deger]) => deger);

console.log(tekrarEdenler); // ["elma", "armut"]
console.log([...sayac]); // [["elma", 3], ["armut", 2], ["kiraz", 1]]

Kod her değer için bir sayaç tutar. tekrarEdenler yalnızca en az iki kez görülen değerleri verir; sayac ise tek geçenler dâhil tüm değerlerin adetlerini içerir. Örnekte sonuç, “elma”nın üç, “armut”un iki kez geçtiğini gösterir. Kaynak dizi değiştirilmez.

Yalnızca tekrar eden değerleri bulma​


Adetleri hesaplamanız gerekmiyorsa Set ile daha kısa bir çözüm kullanabilirsiniz:

JavaScript:
const dizi = ["elma", "armut", "elma", "kiraz", "armut", "elma"];
const gorulen = new Set();
const tekrarEdenler = new Set();

for (const deger of dizi) {
  if (gorulen.has(deger)) {
    tekrarEdenler.add(deger);
  } else {
    gorulen.add(deger);
  }
}

console.log([...tekrarEdenler]); // ["elma", "armut"]

İlk karşılaşmada değer gorulen kümesine eklenir; aynı değer yeniden geldiğinde tekrarEdenler kümesine alınır. Sonuç kümesi, bir değer üçüncü veya daha fazla kez geçse bile onu bir kez tutar. Tekrar sayıları da gerekiyorsa ilk örnekteki sayaç yöntemini tercih edin.

Nesne ve karşılaştırma ayrımı​


Set ve Map, sayılar ve metinler gibi temel değerleri değerlerine göre karşılaştırır. Nesnelerde ise içeriklerine değil, aynı nesne örneği olup olmadıklarına bakılır. Bu nedenle aşağıdaki iki nesne aynı alanları taşısa da tekrar olarak değerlendirilmez:

JavaScript:
const dizi = [{ id: 1 }, { id: 1 }];
console.log(new Set(dizi).size); // 2

Nesneleri id gibi bir alana göre yinelenen saymanız gerekiyorsa, kümeye veya sayaca nesnenin kendisini değil bu alanın değerini koyun. Örneğin id değerlerini saymak için sayac.set(nesne.id, (sayac.get(nesne.id) ?? 0) + 1) yaklaşımını kullanabilirsiniz; böylece aynı id değerine sahip farklı nesneler aynı anahtar altında sayılır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic