Introducción
En este laboratorio, exploraremos una implementación práctica de una función de muestra ponderada en JavaScript. La función devuelve un elemento aleatorio de una matriz, con probabilidades asignadas a cada elemento según los pesos proporcionados. A través de este laboratorio, aprenderemos a usar métodos de matriz como reduce() y findIndex() junto con Math.random() para generar el resultado deseado.
Cómo obtener una muestra ponderada de una matriz en JavaScript
Para obtener aleatoriamente un elemento de una matriz según los pesos proporcionados, siga estos pasos:
- Abra la Terminal/SSH y escriba
nodepara comenzar a practicar la codificación. - Utilice
Array.prototype.reduce()para crear una matriz de sumas parciales para cada valor enweights. - Utilice
Math.random()para generar un número aleatorio yArray.prototype.findIndex()para encontrar el índice correcto basado en la matriz producida previamente. - Finalmente, devuelva el elemento de
arrcon el índice producido.
A continuación, se muestra el código para lograr esto:
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)
];
};
Puede probar esta función pasando una matriz y sus pesos correspondientes como argumentos:
weightedSample([3, 7, 9, 11], [0.1, 0.2, 0.6, 0.1]); // 9
Resumen
¡Felicitaciones! Has completado el laboratorio de Muestra Ponderada. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.