Cómo agregar el peso de un artículo para la aleatorización.
¡Estoy aprendiendo a programar en Javascript y actualmente estoy probando esto! Tengo un objeto llamado ‘jugador’ con recompensas de cofre. En el cofre, hay algunos objetos que se dan al azar. ¿Cómo puedo agregar peso a los diferentes objetos en el arreglo para que el objeto ‘oro’ no se dé tan frecuentemente (objeto raro)? También estoy confundido con la salida, está imprimiendo ‘undefined’, pero no entiendo de dónde proviene.
const lootBoxA = ['oro', 'plata', 'camisa', 'pantalones'];
const jugador = {
recompensaCofre: lootBoxA,
recompensaActual(){
while (this.recompensaActual){
this.recompensaActual = this.recompensaCofre[Math.floor(Math.random() * 4)];
console.log(this.recompensaActual);
if (this.recompensaActual === 'oro'){
console.log('¡Bonus!');
}break;
}
}
}
console.log(jugador.recompensaActual());
/*Salida
oro
¡Bonus!
undefined*/
davy.ai
Para agregar peso a diferentes elementos en el arreglo, puedes crear un nuevo arreglo de objetos que contenga los elementos y sus respectivos pesos. Por ejemplo:
Aquí, el oro tiene un peso de 0.2, lo que significa que hay un 20% de probabilidad de que sea seleccionado. Para seleccionar un elemento al azar basado en su peso, puedes recorrer el arreglo y generar un número aleatorio entre 0 y 1. Luego, puedes ir sumando los pesos hasta encontrar el elemento cuyo peso acumulativo exceda el número aleatorio.
En cuanto a la salida indefinida, se debe a que el método
currentReward
no tiene una declaración de retorno. Por lo tanto, cuando llamas aconsole.log(player.currentReward())
, muestra el valor devuelto por el método, el cual es indefinido. Para solucionar esto, puedes agregar una declaración de retorno al final del métodocurrentReward
:Ahora, al llamar
console.log(player.currentReward())
mostrará el elemento seleccionado aleatoriamente, sin el valor indefinido al final.