Front End

25 jun, 2018

Economizando algumas linhas de código com o Collect.js

Publicidade

Quando estamos trabalhando com programação, há várias rotinas que acabam se repetindo independente do projeto. Seja fazer uma busca, ordenar uma lista, tirar uma média dos valores, enfim, existem vários destes tipos de funções que acabamos implementando repetidas vezes.

Para facilitar a nossa vida e nos poupar desse trabalho monótono, o engenheiro de software Daniel Eckermann (@ecrmnn) desenvolveu o Collect.js, uma pequena biblioteca de métodos utilitários para Arrays e Objetos. O projeto já tem mais de 3000 estrelas no GitHub e assim como tantos outros projetos na plataforma, está disponível sob licença MIT.

O curioso sobre esta biblioteca é que ela se baseia muito nos métodos que já existem no Laravel, de modo que, para quem já conhece o framework PHP mais badalado do momento, se sentirá em casa com esta biblioteca.

Como são muitos métodos disponíveis, mostrarei somente alguns deles. Se isso despertar a sua curiosidade, não deixe de visitar a documentação oficial para entender todos eles.

Instalando o Collect

Há várias maneiras de se utilizar o Collect.js no seu projeto. O primeiro é através do gerenciador de dependências do Node – o npm – ou através do Yarn (se ainda não o conhece, há um ótimo artigo sobre ele aqui no iMasters).

Para isso, basta executar o seguinte comando no terminal:

npm install collect.js --save

Ou no caso do Yarn:

yarn add collect.js

Uma segunda alternativa é através de um CDN. Para isso, basta copiar em uma tag script no seu HTML o seguinte link:

https://cdnjs.cloudflare.com/ajax/libs/collect.js/4.0.19/collect.min.js

E por último, mas não menos importante, você pode baixar – ou inserir via tag script – o código gerado na última versão buildada diretamente do GitHub. Basta acessar este link.

Uma coleção de códigos convenientes

Como citei no início do artigo, há muitos métodos auxiliares bacanas dentro da biblioteca. Por isso, mostrarei somente alguns deles. O primeiro deles é o avg(). Como o nome já indica, ele nos dá a média simples dos valores contidos dentro de um array, como por exemplo:

const media = collect([1, 3, 3, 7]).avg();
console.log(media); // => 3.5

No entanto, um uso mais interessante é quando temos um Array de objetos e queremos fazer a média de uma das propriedades destes objetos. Por exemplo, se quisermos a média de idade dos alunos de uma sala:

const collection = collect([
  {nome: 'Maria Joaquina', idade: 10},
  {nome: 'Joãozinho Lopes', idade: 12}
]);

const idadeMedia = collection.avg('idade');
console.log(idadeMedia); // => 11

Um outro método bem interessante é o diff(). Ele recebe dois arrays como parâmetro e nos retorna os valores que são diferentes entres eles, ou seja, os valores que estão no segundo array e que não constam no primeiro. Por exemplo:

const collection = collect([1, 2, 3, 4, 5]);
const diff = collection.diff([1, 2, 3, 9]);
const diferenca = diff.all();

console.log(diferenca) //=> [4, 5]

Outro método bem curioso é o combine(). A ideia é que ele combina os elementos de dois arrays entre si em um único objeto. Por exemplo, imagine que eu tenho um array com medidas e um outro com objetos. Poderíamos combinar os dois desta forma:

const objetos = collect(['lápis', 'borracha', 'apontador']);
const combinacao = objetos.combine([10, 12, 13]);

console.log(combinacao.all());
// => { 'lápis': 10, borracha: 12, apontador: 13 }

Se quisermos inverter as chaves com os valores, podemos usar o método flip(). Usando o objeto do exemplo anterior, teríamos:

const objeto = collect({ 'lápis': 10, borracha: 12, apontador: 13 });
const invertido = objeto.flip();

console.log(invertido);
// => { 10: 'lápis', 12: 'borracha', 13: 'apontador' }

Bem legal, né? Há vários outros métodos que seguem esta mesma natureza e podem nos ajudar a economizar várias linhas de código. Entretanto, nem tudo são flores.

Métodos nem tão úteis assim

Se você olhar toda a lista de métodos disponíveis, notará que alguns deles são implementações de coisas que agora já são nativas no JavaScript, como os métodos has(), every(), some() e map(), por exemplo. Outros deles também são bem inúteis, como o first().

Por isso, sempre avalie os métodos antes de sair utilizando. Alguns realmente facilitam bastante a nossa vida, no entanto, outros podem ser feitos de maneiras mais inteligentes.