Operações de agregação com JavaScript

Veja como extrair de um array a soma, média, maior e menor valor

Ao trabalhar com dados, pode ser necessário obter informações resumidas. Para fazer isso, se utilizam operações de agregação, que processam um determinado conjunto de dados, e retornam apenas um valor.

As operações de agregação mais comuns são:

COUNT - Conta o total de registros

SUM - Soma valores

AVG - Obtem a média

MAX - Retorna o maior valor

MIN - Retorna o menor valor

Neste artigo vamos ver como trabalhar com estas operações utilizando arrays no JavaScript. Vamos aprender como fazer isso de duas formas, primeiro utilizando um array apenas com números, e depois utilizando um array com objetos.

Primeiro vamos criar o nosso array de testes:

var array_teste1 = [20, 10, 3, 10];

Todo array possui uma propriedade chamada length que retorna a quantidade de registros. Sabendo disso, para saber a quantidade de registros do array, basta fazer:

console.log(array_teste1.length);

Agora vamos obter o menor e o maior valor. O JavaScript tem um objeto Math que possui os métodos "max" e "min", mas elas funcionam apenas com uma lista de números. Para utilizar um array, temos que usar um "spread operator" na hora de enviar os dados para o método.

Nos exemplos a seguir vamos criar funções utilizando arrow functions.

const arrMenorValor = arr => Math.min(...arr);

const arrMaiorValor = arr => Math.max(...arr);

console.log(arrMenorValor(array_teste1));

console.log(arrMaiorValor(array_teste1));

E para obter a soma e a média? Neste caso vamos ter que utilizar o "reduce", que permite iterar o array e retornar apenas um valor.

const arrSoma = arr => arr.reduce((a,b) => a + b, 0)

const arrMedia = arr => arr.reduce((a,b) => a + b, 0) / arr.length

console.log(arrSoma(array_teste1);

console.log(arrMedia(array_teste1);

Perceba que o reduce recebe dois parâmetros, o primeiro é o total e o segundo e o item atual. A diferença entre as funções é que a média vai dividir o resultado pelo total de elementos do array.

Agora vamos ver as mesmas operações utilizando um array de objetos.  O array que vamos utilizar é o seguinte:

var arrayVendas = [

{"vendedor": "Joao", "total": 500},

{"vendedor": "Lucas", "total": 700},

{"vendedor": "Matheus", "total": 200},

{"vendedor": "Marcos", "total": 600}

];

Para ver o total de registros para utilizar a propriedade length.

console.log(arrayVendas.length);

Para obter o maior e o menor valor será necessário fazer um "map" no array, o map permite iterar o array e retornar um novo array apenas com o conteúdo desejado, neste caso, precisamos de um novo array apenas com o "total" de cada registro.

const maiorVenda = arr => Math.max(...arr.map(o => o.total));

const menorVenda = arr => Math.min(...arr.map(o => o.total));

console.log(maiorVenda(arrayVendas));

console.log(menorVenda(arrayVendas));

Para fazer a soma e a média vamos continuar usando o "reduce", a diferença em relação ao primeiro exemplo é que vamos extrair apenas o "total" de cada objeto do array.

const mediaVenda = arr => arr.reduce((a, {total}) => a + total, 0) / arr.length;

const somaVenda = arr => arr.reduce((a, {total}) => a + total, 0);

console.log(mediaVenda(arrayVendas));

console.log(somaVenda(arrayVendas));

 

Quer conferir mais dicas sobre JavaScript? Clique aqui e veja mais dicas!