Skip to content

Instantly share code, notes, and snippets.

@juniorgarcia
Created December 9, 2021 11:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juniorgarcia/0cb71f45a97046b577106a618ae2c523 to your computer and use it in GitHub Desktop.
Save juniorgarcia/0cb71f45a97046b577106a618ae2c523 to your computer and use it in GitHub Desktop.
Array.every e Array.some
/**
* Arrays tem um método para avaliar se todos os itens
* correspondem a uma condição: o método "every"
*
* O argumento que ele aceita é uma função que recebe um item do array por
* iteração, e, caso essa função retorne `truthy` para todos os elementos,
* Array.every retorna `true`, confirmando que todos os itens do seu array
* correspondem a essa condição.
*
* Vamos fazer um exercício: dado um array de números inteiros, verifique se
* todos são pares
*/
// Função de teste
const isEven = (n) => n % 2 === 0
// loga "true", porque todos os valores do array são pares
console.log([2, 4, 6].every(isEven))
// loga "false", porque 1 não é par
console.log([1, 2, 4].every(isEven))
/**
* Verifica se todos os itens do array correspondem a condição imposta por
* `fn`.
* @param {*} array
* @param {Function} fn
* @returns {Boolean}
*/
const every = (array, fn) => {
for (i = 0; i < array.length; i++) {
if (!fn(array[i])) return false
}
return true
}
// Testa se um número é maior que 10
const gtZero = (n) => n > 10
// Loga "false", porque 1 é menor que 10
console.log(every([1, 20, 30, 40, 50], gtZero))
// Loga "true", porque todos os números são maiores que 10
console.log(every([11, 20, 30, 40, 50], gtZero))
/**
* E agora, por diversão, vamos implementar nossas próprias versões de
* Array.some e Array.every como funções puras.
*/
/**
* Verifica se pelo menos um item do array corresponde a condição imposta por
* `fn`.
* @param {*} array
* @param {Function} fn
* @returns {Boolean}
*/
const some = (array, fn) => {
for (i = 0; i < array.length; i++) {
if (fn(array[i])) return true
}
return false
}
// Testa se um número é maior que 10
const gtZero = (n) => n > 10
// Loga "false", porque todos os números são menores que 10
console.log(some([1, 2, 3, 4, 5], gtZero))
// Loga "true", porque 30 é maior que 10
console.log(some([1, 2, 30, 4, 5], gtZero))
/**
* Assim como `every`, `some` testa condições nos itens do array, mas nesse caso
* ele retorna true se pelo menos um item satisfaz a condição.
* Dessa vez, vamos verificar se algum item do array é menor que zero
*/
// Função de teste
const ltZero = (n) => n < 0
// loga "true", porque -42 é menor que zero
console.log([2, 4, 6, -42].some(ltZero))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment