Percursos
/
JavaScript
JavaScript
/
Exercícios
/
Os encantamentos analíticos de Elyse
Os encantamentos analíticos de Elyse

Os encantamentos analíticos de Elyse

Exercício de aprendizagem

Introdução

Funções arrow

Além das declarações de funções e das expressões de funções, o JavaScript tem outra sintaxe muito concisa para definir uma função. Estas funções chamam-se funções arrow.

Aqui está uma comparação entre uma declaração de função e uma função arrow.

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 contiver apenas uma instrução de retorno, como no exemplo acima, as chavetas {} e a palavra-chave return podem ser omitidas. Se houver apenas um parâmetro, também se podem omitir os parênteses ().

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

As funções arrow são usadas muitas vezes 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 incorporados para analisar o conteúdo do array. A maioria destes métodos recebe como argumento uma função que devolve verdadeiro ou falso. Uma função deste tipo chama-se predicate.

Estes métodos incorporados servem para serem usados em vez de um ciclo for ou do método forEach incorporado:

Exemplo de análise com um ciclo 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 com um método incorporado:

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

Abaixo mostramos outros métodos incorporados úteis para analisar um array. Consulta a MDN para veres a lista completa de métodos de array.

includes

O método includes(value) determina se um array inclui um determinado valor. Devolve true quando o valor está incluído 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. Testa se todos os elementos do array devolvem true quando são passados ao predicado. Por outras palavras: o método testa se todos os seus elementos passam o teste passado à chamada da função. Devolve true quando todos os elementos passam o 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 devolve true se pelo menos um elemento do array passar o teste do predicado.

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

find

O método find(predicate) devolve o valor do primeiro elemento do array que passa o teste do predicate. Onde some() devolve true quando passa, find() devolve o valor concreto que está no array. O método devolve undefined quando nenhum dos elementos do array passa o 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 devolve o índice (o primeiro) do elemento que passa o teste do predicado em vez do value. O método devolve -1 quando nenhum dos elementos do array passa o teste do predicado.

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

Instruções

A Elyse, futura maga, continua o seu treino. Vão ser-lhe dadas várias pilhas de cartas com que precisa de fazer os seus truques. Para tornar as coisas um pouco mais fáceis, só usa as cartas de 1 a 10.

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

1. Encontra a posição de uma carta

A Elyse quer saber a posição (o índice) de uma carta na pilha.

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

2. Determina se uma carta está presente

A Elyse quer determinar se uma carta está presente na pilha, ou seja, se a pilha contém um number específico.

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

3. Determina se cada carta é par

A Elyse quer saber se todas as cartas são pares, ou seja, se cada número na pilha é um number par.

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

4. Verifica se a pilha contém uma carta ímpar

A Elyse quer saber se há um número ímpar na pilha.

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

5. Obtém a primeira carta ímpar da pilha

A Elyse quer saber o valor da primeira carta ímpar.

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

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

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

getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
Editar via GitHub A ligação abre numa nova janela ou separador
JavaScript Exercism

Estás pronto para começar Os encantamentos analíticos de Elyse?

Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.