Introdução
Neste laboratório, exploraremos uma implementação prática de uma função de amostragem ponderada em JavaScript. A função retorna um elemento aleatório de um array, com probabilidades atribuídas a cada elemento com base nos pesos fornecidos. Através deste laboratório, aprenderemos como usar métodos de Array como reduce() e findIndex(), juntamente com Math.random(), para gerar o resultado desejado.
Como Obter uma Amostra Ponderada de um Array em JavaScript
Para obter aleatoriamente um elemento de um array com base nos pesos fornecidos, siga estes passos:
- Abra o Terminal/SSH e digite
nodepara começar a praticar a codificação. - Use
Array.prototype.reduce()para criar um array de somas parciais para cada valor emweights. - Use
Math.random()para gerar um número aleatório eArray.prototype.findIndex()para encontrar o índice correto com base no array produzido anteriormente. - Finalmente, retorne o elemento de
arrcom o índice produzido.
Aqui está o código para conseguir isso:
const weightedSample = (arr, weights) => {
let roll = Math.random();
return arr[
weights
.reduce(
(acc, w, i) => (i === 0 ? [w] : [...acc, acc[acc.length - 1] + w]),
[]
)
.findIndex((v, i, s) => roll >= (i === 0 ? 0 : s[i - 1]) && roll < v)
];
};
Você pode testar esta função passando um array e seus pesos correspondentes como argumentos:
weightedSample([3, 7, 9, 11], [0.1, 0.2, 0.6, 0.1]); // 9
Resumo
Parabéns! Você concluiu o laboratório de Amostra Ponderada. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.