CountBy işlevi, insanların Lodash'ı JavaScript kod tabanlarında kullandıkları işlevlerden biridir. Burada size countBy'nin Lodash olmadan JavaScript'te sadece JavaScript'in azaltma yöntemini kullanarak nasıl uygulanacağına dair kısa bir örnek vermek istiyorum.

Diyelim ki aşağıdaki nesne dizimiz var ve aşağıdaki çıktıyı elde etmek için bunları özelliğe göre saymak istiyoruz:

const users = [ 
  { ad : "Jim" , renk : "mavi" } ,   
  { ad : 'Sam' , renk : 'mavi' } ,   
  { ad : "Eddie" , renk : "yeşil" } ,   
] ;
 
const countByColor = // TODO: countBy'yi uygulayın 
 
konsol . günlük ( countByColor ) ;
 
// {mavi: 2, yeşil: 1}

Her öğeyi yinelemek için bir dizide JavaScript'in azaltma yöntemini kullanabiliriz:

const countByColor = kullanıcılar . azalt ( ( acc , değer ) => {  
  // YAPILACAK: countBy'yi uygulama
 
  acc iade ;
} , { } ) ; 

 

accBu azaltmanın geri çağırma işlevi için toplayıcımız (burada ) olarak boş bir nesneyle başlıyoruz . İşlevin her yinelemesi için, değiştirilmiş (burada hala değişmemiş) toplayıcıyı döndürürüz. CountBy'yi uygulayalım:

const usersByColor = kullanıcılar . azalt ( ( acc , değer ) => {  
  if ( ! acc [ değer . renk ] ) {  
    acc [ değer . renk ] = 1 ;  
  } else {  
    acc [ değer . renk ] ++ ;
  }
 
  acc iade ;
} , { } ) ; 

Akümülatör, halihazırda yinelenen değerin rengi için başlatılmış bir sayıma sahip değilse, onu nesnede tahsis edilen 1 sayısıyla başlatırız, halbuki renk anahtardır. Bir sayı varsa, bunu ++ operatörü ile birer birer artırabiliriz.

Esasen boş bir nesneyle başlarız ve her yinelenen değer için, bu nesnedeki özelliğe (burada renk) dayalı olarak 1 ile yeni bir sayım ayırmamız gerekip gerekmediğini görüşürüz. Değilse, sayımı bir artırıyoruz, çünkü zaten saymaya başladık.