Arrays: some() e every()
Conforme vamos estudando programação funcional — nesse caso no javascript — sempre nos deparamos pelos métodos map, reduce e filter. Apesar de resolverem um problema, nem sempre esses métodos são os ideais para uma necessidade específica.
Este artigo vem pra complementar os três métodos citados acima e até o forEach.
Some
O método some() passa por todos items do array verificando se um ou mais itens correspondem a uma função de callback e retornam true ou false. Vamos ao exemplo.
Vamos considerar que temos um array com alguns produtos.
const myProducts = [
{
name: 'Carrot',
type: 'vegetable',
organic: true
}, {
name: 'Milk',
type: 'dairy',
organic: true
}
];
Agora vamos verificar se algum dos itens deste array possui algum vegetal usando o método forEach.
let productsHaveVegetables = false;myProducts.forEach(function(item) {
if (item.type === 'vegetable') {
productsHaveVegetables = true;
}
});console.log(productsHaveVegetables); // true
Uma outra ousada opção seria usar um reduce e checar se o array gerado pelo mesmo tem algum item.
Funciona? Funciona. É o ideal? Não.
Usando o método some(), essa tarefa fica muito mais fácil:
let productsHaveVegetables = myProducts.some(function(item) {
return item.type === 'vegetable';
});console.log(productsHaveVegetables); // true
Um exemplo usando arrow functions:
const productsHaveVegetables = myProducts.some(item => item.type === 'vegetables');console.log(productsHaveVegetables); // true
Every
Este método funciona exatamente igual ao some(), mas somente retornará true se todos os itens do array corresponderem a função de callback passada como parâmetro.
const isEverythingOrganic = myProducts.every(item => item.organic);console.log(isEverythingOrganic); // true