O método filter() do Array JavaScript
Neste tutorial você vai aprender como usar o método filter()
para filtrar elementos em um Array.
English version: https://www.javascripttutorial.net/javascript-array-filter/
Uma das tarefas mais comuns ao trabalhar com um array é criar um novo array que contenha um subconjunto de elementos do array original.
Suponha que você tenha um array cities
que é um conjunto de objetos de cidades, onde cada objeto possui duas propriedades: name
e population
.
Para localizar a cidade cuja a população é maior do que 3 milhões, você normalmente faz um loop sobre os elementos do array usando um loop for
e testando se o valor da propriedade da população satisfaz a condição, dessa forma:
Resultado:
O Array JavaScript fornece o método filter()
que permite executar esta tarefa de uma maneira mais curta e mais limpa.
O exemplo a seguir retorna o mesmo resultado que o anterior:
Neste exemplo, chamamos o método filter()
do array de objetos cities
e passamos uma função que testa cada elemento.
Dentro da função, verificamos se a população de cada cidade no array é superior a 3 milhões.
Se for esse o caso, a função retorna true
caso contrário, retornará false
. O método filter()
inclui apenas o elemento no array de resultados se o elemento satisfizer o teste na função que foi passada.
A partir do ES6, o código fica ainda mais limpo quando você usa arrow function.
O método filter() em detalhes
O método filter
cria um novo array com todos os elementos que passam no teste implementado pela função de callback
.
Internamente, o método filter()
itera sobre casa elemento do array e passa cada elemento para a função de retorno callback
. Se a função callback
retornar true
, incluirá o elemento no array de retorno.
O método filter()
aceita dois argumentos: uma função callback
e um objeto opcional.
Assim como outros métodos iterativos do objeto Array, como every()
, some()
, map()
e forEach()
, a função de callback
tem a seguinte forma:
A função callback
possui 3 argumentos:
- O argumento
currentElement
é o elemento atual no array que está sendo processado pela função decallback
. - O
index
docurrentElement
que está sendo processado pela função decallback
. - O objeto
array
que está sendo percorrido.
Os argumentos index
e array
são opcionais.
O argumento contexObject
do método filter()
é opcional. Se você passar esse valor poderá referenciá-lo usando a palavra-chave this
dentro da função de callback
.
É importante observar que o método filter()
não altera o array original.
Exemplos de uso do filter()
Como o método filter()
retorna um novo array, você pode encadear o resultado com outros métodos iterativos, como sort()
e map()
.
Por exemplo, a seguir mostramos como encadear 3 métodos: filter()
, sort()
e map()
:
Resultado:
Entenda como funciona:
- Primeiro, o método
filter()
retorna as cidades cujas populações são menores que 3 milhões. - Segundo, o método
sort()
ordena as cidades pela quantidade de população em ordem decrescente. - Terceiro, o método
map()
mostra cada elemento no array de resultados na janela de console.
O exemplo a seguir ilustra o uso do argumento contextObject
que especifica um objeto que pode ser referenciado na função callback
usando a palavra-chave this
.
Resultado:
Entenda como funciona:
- Primeiro, defina a função
isInRange()
que verifica se o argumento é um número e se está dentro do intervalo especificado pelas propriedadeslower
eupper
de um objeto. - Em seguida, defina um array
data
de dados misturados que contém números, strings e indefinidos. - Então defina o objeto
range
com duas propriedadeslower
eupper
. - Depois disso, chame os métodos
filter()
do arraydata
e passe a funçãoisInRange()
e o objetorange
. Como passamos o objetorange
dentro da funçãoisInRange()
a palavra-chavethis
se refere ao objetorange
. - Por fim, mostre a matriz de resultados na janela de console.
Nesse tutorial você aprendeu como usar o método filter()
do Array JavaScript para filtrar elementos em um array com base em um teste fornecido por uma função de retorno de chamada callback
.