Trilhas
/
JavaScript
JavaScript
/
Exercícios
/
Encantamentos analíticos de Elyse
Encantamentos analíticos de Elyse

Encantamentos analíticos de Elyse

Exercício de aprendizagem

Introdução

Funções de seta

Além de declarações de função e expressões de função, o JavaScript também tem outra sintaxe bem concisa para definir uma função. Essas funções são chamadas de funções de seta.

Veja uma comparação entre uma declaração de função e uma função de seta.

function addUpTwoNumbers(num1, num2) {
  return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
  return num1 + num2;
};

Se o corpo da função tiver apenas uma instrução de retorno, como no exemplo acima, podemos omitir o {} e a palavra-chave return. Se houver apenas um parâmetro, os parênteses () também podem ser omitidos.

const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;

As funções de seta são muito usadas para definir funções de callback curtas diretamente na chamada da função.

applyToSquare(number => number * number);

Análise de arrays

Os Arrays têm métodos internos para analisar o conteúdo do array. A maioria desses métodos recebe como argumento uma função que retorna true ou false. Uma função assim é chamada de predicate.

Esses métodos internos devem ser usados em vez de um laço for ou do método interno forEach:

Exemplo de análise usando um laço for:

const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
  if (numbers[i] === 'two') {
    return i;
  }
}
// => 1

Exemplo de análise usando um método interno:

const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1

Veja abaixo alguns outros métodos internos úteis para analisar um array. Consulte a MDN para ver a lista completa de métodos de array.

includes

O método includes(value) determina se um array contém determinado valor. Ele retorna true quando o valor está presente e false caso contrário.

const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false

every

O método every(predicate) recebe uma função que é um predicado. Ele verifica se todos os elementos do array retornam true quando passados ao predicado. Em outras palavras: o método testa se todos os seus elementos passam no teste passado para a chamada da função. Ele retorna true quando todos os elementos passam no teste do predicado e false caso contrário.

const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true

some

O método some(predicate) é igual ao método every, mas retorna true se pelo menos um item do array passar no teste do predicado.

const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true

find

O método find(predicate) retorna o valor do primeiro elemento do array que passa no teste do predicate. Onde some() retorna true quando o teste passa, find() retorna o valor de fato presente no array. O método retorna undefined quando nenhum dos elementos do array passa no teste do predicado.

const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1

findIndex

O findIndex(predicate) é igual ao método find(), mas retorna o índice do elemento (o primeiro) que passa no teste do predicado, em vez do value. O método retorna -1 quando nenhum dos elementos do array passa no teste do predicado.

const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1

Instruções

Elyse, aspirante a maga, continua seu treinamento. Ela vai receber vários montes de cartas com os quais precisa realizar seus truques. Para facilitar um pouco as coisas, ela usa apenas as cartas de 1 a 10.

Neste exercício, use métodos nativos para analisar o conteúdo de um array.

1. Encontre a posição de uma carta

Elyse quer saber a posição (índice) de uma carta no monte.

const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3

2. Determine se uma carta está presente

Elyse quer determinar se uma carta está presente no monte, ou seja, se o monte contém um number específico.

const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true

3. Determine se cada carta é par

Elyse quer saber se cada carta é par, ou seja, se cada número no monte é um number par.

isEachCardEven([2, 4, 6, 7]);
// => false

4. Verifique se o monte contém uma carta de valor ímpar

Elyse quer saber se há um número ímpar no monte.

doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true

5. Obtenha a primeira carta ímpar do monte

Elyse quer saber o valor da primeira carta que é ímpar.

getFirstOddCard([4, 2, 8, 7, 9]);
// => 7

6. Determine a posição da primeira carta par

Elyse quer saber a posição da primeira carta que é par.

getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
Editar via GitHub O link abre em uma nova janela ou aba
JavaScript Exercism

Tudo pronto para começar Encantamentos analíticos de Elyse?

Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.