Blog - Luiz Gustavo Web

Neste espaço me dedico a escrever artigos sobre GNU/Linux e desenvolvimento web.
Sinta-se à vontade.

Filter, Sort & Arrow Functions

14 de Setembro de 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(fruit){
    return fruit.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(fruit => fruit.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.

© 2006 - 2017