Filter, Sort & Arrow Functions

14/09/2017

Considere um conjunto de frutas:
let frutas = [
'Laranja',
'Manga',
'Maçã',
'Limão',
'Abacaxi',
'Uva',
'Melão'
];

Suponha que precisamos retornar apenas as frutas que começam com a letra M. Podemos utilizar a função filter para realizar esta operação:
let frutasFiltradas = frutas.filter(function(fruta){
return fruta.charAt(0) == 'M';
});
// retorna ['Manga', 'Maçã', 'Melão']

Podemos tomar proveito da expressão arrow function introduzida no ES6 para simplificar nossa operação:
let frutasFiltradas = frutas.filter(fruta => fruta.charAt(0) == 'M');

Isso retornará o mesmo resultado: "Manga, Maçã e Melão".

Suponha que agora temos um conjunto de inteiros e precisamos ordena-lo numericamente.
let inteiros = [
10, 5, 100, 25
];

Utilizaremos a função sort para realizar esta operação:
let inteirosOrdenados = inteiros.sort();
// retorna [5, 10, 25, 100]

Precisamos ordena-lo novamente, mas dessa vez, da maneira inversa. Para isso precisamos utilizar a função sort de uma maneira mais avançada, usando como parâmetro uma função de comparação:
let inteirosOrdenados = inteiros.sort((a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
});
// retorna [100, 25, 10, 5]

Em uma breve explicação, os parâmetros a e b são dois elementos sendo comparados:

- Quando a função retorna menos que 0, coloca a para um indíce anterior a b
- Quando a função retorna 0, deixa inalterado
- Quando a função retorna maior que 0, coloca b para um indíce anterior que a


Embora seja mais complexa, essa operação nos dá flexibilidade e, acima de tudo, permite ordenar arrays multidimensionais:
let frutas = [
{
nome: "Banana",
quantidade: 20
},
{
nome: "Laranja",
quantidade: 100
},
{
nome: "Maçã",
quantidade: 10
},
{
nome: "Manga",
quantidade: 50
}
];

let frutasFiltradas = frutas.sort((a, b) => {
if (a.quantidade > b.quantidade) return 1;
if (a.quantidade < b.quantidade) return -1;
return 0;
});

O que fizemos acima, foi ordenar a variável frutas de forma ascendente de acordo com sua quantidade.

Similar articles

see all articles