1
resposta

.sort(() => 0.5 - Math.random()).splice(0,3);

Sei que o random gera um número entre 0 e 1... mas não entendo a razão do 0.5.... é ainda mais... por qual razão foi utilizada a subtração?? Testei o número 1, inteiro, e minha lista não se movia... Logo com o 0.5 ele alternava suas posições...

1 resposta

Oi, João! Tudo bem?

Vamos lá! O método .sort( ) ordena os elementos do Array e retorna o próprio array, só que ordenado. Esse método recebe uma função callback, que geralmente possui a lógica que você deseja implementar para ordenar os elementos do array. Se você não passa nenhum método, os elementos serão ordenados de acordo com a pontuação do código Unicode.

Vamos ver uns exemplos:

const frutas = ['Uvas', 'Maçãs', 'Bananas'];
fruit.sort(); // A saída será ['Bananas', 'Maçãs', 'Uvas']

Neste outro exemplo, podemos ver claramente como o .sort( ) ordena os elementos de acordo com o código unicode:

const scores = [1, 10, 2, 21];
scores.sort(); // [1, 10, 2, 21]

// Observe que 10 vem antes do 2,
// porque '10' vem antes de '2' em ponto de código Unicode.

Voltando ao código da aula, temos uma função callback que é responsável por gerar uma regra de ordenação de forma aleatória, utilizando o Math.ramdom(). Isso irá fazer com que os pratos sejam ordenados de maneira aleatória.

E para pegar só os três primeiros elementos da lista usamos o splice()indicando que queremos pegar os três primeiros elementos, dessa forma:

Array.sort(() => 0.5 - Math.random()).splice(0,3);

O resultado disso será um** Array** com três pratos ordenados de forma aleatória, e esses pratos serão exibidos como sugestão para o usuário!

O lance do 0.5 - Math.random() é apenas para garantir uma ordem específica para a ordenação da função sort(). Pode executar e notar que todos os números gerados por essa "fórmula" são negativos. Isso faz com que o sort() tenha uma ordenação específica, já que dependendo do resultado da função que é passada por parâmetro para ele (Se o resultado for positivo, zero ou negativo), ele pode orgenar os elementos de um array de uma maneira diferente. Se você quiser entender isso melhor, acessa a documentação clicando aqui.

Para saber mais sobre os métodos sort() e splice() vou deixar aqui embaixo os links da documentação de cada um:

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software