Aprenda Lodash (14) _.countBy, conte itens em um array

De acordo com a documentação do lodash, _.countBy cria um objeto composto por chaves geradas a partir dos resultados da execução de iteratee em cada elemento de collection. O valor correspondente de cada chave é o número de vezes que a chave foi retornada por iteratee. A função iteratee é chamada com um argumento: (value).

Recrie o lodash _.countBy com sua própria função usando JavaScript puro.

Entrada

  • collection (Array or Object): A coleção a ser percorrida.
  • [iteratee=_.identity] (Function or string): A função iteratee usada para verificar as chaves e contá-las.

Retorna um objeto com os valores contados.

Cenário da vida real

Você trabalha em uma concessionária de automóveis. Seu chefe pede que você conte os carros no pátio de acordo com a cor. Você volta e diz que há 5 vermelhos, dois azuis e um verde. A cor a ser pesquisada é a função iteratee, e o pátio é o objeto ou array que você está pesquisando. Ele também pode fornecer uma função para verificar os carros, como contar os carros com quilometragem acima de 100,000 quilômetros. Você volta e diz "true": 3, "false": 4; essencialmente, 3 carros estão acima de 100k e 4 estão abaixo.

Exemplos

houses = [
   {
    stories: 2,
    door: "blue"
   },
   {
    stories: 3,
    door: "blue"
   },
   {
    stories: 2,
    door: "green"
   }
]

countBy(houses, "door") ➞  { blue: 2, green: 1 }

Observações

Não tente importar lodash; você está simplesmente escrevendo sua própria versão.