To The Max pt-br Explainer

O objetivo deste desafio: Encontrar o maior número no array list com um for…of loop e a função large().

Passo a passo da solução Nesta lição, importamos a list que não aparece na lição, mas pode ser vista abaixo no código oculto. list é apenas um array de 5 números diferentes.

Para encontrar o maior número na array list, usaremos a função large(), que leva apenas 2 números e retorna o maior dos dois:

function larger(a, b) {
    return a > b ? a : b;
}

Se a for maior que b, a função retorna a, caso contrário, retorna b. Portanto, agora a questão é: de onde vieram a e b? Colocamos a e b na seguinte função maximum():

function maximum(array) {
    let max = 0;
    for(let num of array) {
        max = larger(max, num);
    }
    return max;
}

No momento, estamos usando uma função dentro de outra função, então a is max, que começa como zero, e b is num, que é o primeiro número na array list do código oculto. . Para ajudar a esclarecer isso, usaremos a seguinte array como argumento de exemplo para list:

list = [44, 29, 7, 88, 31];

A primeira vez que o loop for … of percorre list, o primeiro número que ele encontra é 44, e sabemos que max começa em 0, então pense na função assim:

function maximum([44, 29, 7, 88, 31]) {
    let max = 0;
    for(let num of [44, 29, 7, 88, 31]) {
        max = large(0, 44); -----> a é 0, b é 44
    }
    return max;
}

Como 44 é maior que 0, max agora se torna 44, e o loop for…of continua com o próximo número na array:

function maximum ([44, 29, 7, 88, 31]) {
    let max = 0;
    for(let  num of [44, 29, 7, 88, 31]) {
        max = larger(44, 29); -----> agora a é 44 e b é 29
    }
    return max;
}

Como 44 é maior que 29, o valor de max permanece 44 e o for…of loop continua. max permanecerá 44, a menos que um número maior seja encontrado na array, portanto, na array:

list = [44, 29, 7, 88, 31];

Podemos ver que max se tornará 88 no final, porque é o maior número na array. Simplesmente usando uma função simples que retorna o maior de 2 números com um for … of loop, criamos um programa que encontra o maior número em uma array:

** Exemplo de solução de código **:
(Clique abaixo para revelar)

function larger(a, b) {
  return a > b ? a : b;
}

function maximum(array) {
  let max = 0;
  for(let num of array) {
    max = larger(max, num);
  }
  return max;
}
console.log(list);
console.log(maximum(list));

Conceitos de JavaScript: Expressão binária (>), Bloco de código (função), condicionais (operador ternário), console.log (), Bloco de código (para loop)
Código adicional _(código oculto que é executado antes do código do desafio) _:

O propósito do código adicional é simplesmente nos dar um array de 5 números chamado list para usar nesta lição. Se você quiser ver como a list é gerada, clique no código adicional abaixo.

const randomNumber = pickRandom (4);
// A função pickRandom(4) gera um número aleatório entre 1 e 4, e isso é armazenado na variável randomNumber //
const index = randomNumber - 1;
// Queremos randomNumber como um índice que usaremos com a array arrayOfArrays abaixo. Aqui, removemos 1 porque os arrays começam em 0, então a variável de índice será 0, 1, 2 ou 3. //
const arrayOfArrays = [
        [44, 29, 7, 88, 31],
        [14, 93, 56, 72, 5],
        [63, 19, 37, 49, 28],
        [98, 85, 76, 51, 33]
    ];
// Um ​​desses 4 arrays será escolhido aleatoriamente //
const list = arrayOfArrays[index];
// A variável `list` agora contém a array `arrayOfArrays` em um índice que irá gerar aleatoriamente 0 - 3 //
1 Like

A minha dúvida faz parte do desafio “Ao Máximo”:

function larger(a, b) {

return a > b ? a : b;

}
function maximum(array) {

let max = 0;

for (let num of array) {

max = larger(max, num);

}

return max;

}

console.log(list);

console.log(maximum(list));

entendi todas as funções, só não consegui interpretar muito bem essas linhas de código:

const list = [...Array(4)].map(i=>pickRandom(90));

const _max = Math.max(...list);

list.splice(pickRandom(3)-1,0,_max+pickRandom(100-_max));

Se alguém puder explicar cada linha, eu agradeceria muito! :slight_smile:

Depois do:
for (let num of array) {

perceba agora que nós vamos atribuir a chamada de função
com a declaração em: max =
Você vai chamar a função: larger()
Depois declarar dentro dela: max, num
max = larger(max, num);
agora podemos fechar a declaração de for, fechando as chaves,
agota esse bloco de função ficará 100% correto.
}

Não entendi oque ta acontecendo aqui nesse codigo, alguem pode me explicar detalhe por detalhe ?

Alguns determinados códigos tem seus valores escondidos para simplificar pelo que parece, por isso tive um pouco de dificuldade para entender esse desafio, pelo fato de que os valores da array estão ocultos, eu até compreendi um pouco, e consegui terminar o desafio com facilidade, mas fiquei me perguntando de onde saíram aqueles números, se haviam apenas letras!?, mas agora o caminho voltou a se iluminar, gratificante, obrigado grasshopper !

Por quê a function maximum precisa chamar a função larger?