gpt4 book ai didi

javascript - 从数组中的多个中查找百分比并偶然返回整个对象

转载 作者:行者123 更新时间:2023-11-30 08:19:45 24 4
gpt4 key购买 nike

我目前正在尝试为奖品制作一个幸运抽奖选择器,我有一个对象,我想以某种方式将其转换为相互依赖的百分比。我在网上查看了其他解决方案,但在查看数组内部并偶然将整个对象返回内部时遇到了麻烦

示例中的最大百分比将是 100%,每个数量将计算出正确的百分比,即数量:22 最有可能被选中,数量:1 是最稀有的,依此类推

        { tshirts: [
{ "tshirtName":"Green Shirt", "qty": 1, },
{ "tshirtName":"Blue Shirt", "qty": 2, },
{ "tshirtName":"Red Shirt", "qty": 7, },
{ "tshirtName":"Yellow Shirt", "qty": 22, },
]}

目前我犯了错误,只是做了以下事情:

const randomChoice = Math.floor(Math.random() * prizes.tshirts.length);
console.log('Your prize is ' + prizes.tshirts[randomChoice].tshirtName);

但这并没有考虑到每个数量所需的不同百分比,它使每个数量都有 25% 的机会

非常感谢任何帮助,谢谢

最佳答案

在 1 和总数量之和之间找到一个随机数,并以此为基础得到一个元素。

let prizes = {"tshirts":[{"tshirtName":"Green Shirt","qty":1},{"tshirtName":"Blue Shirt","qty":2},{"tshirtName":"Red Shirt","qty":7},{"tshirtName":"Yellow Shirt","qty":22}]};

// variable for total quantity sum
let total = 0;

// create an array to keep reference of maximum value of random num
let range = prizes.tshirts.reduce((arr, { qty }, i) => {
arr[i] = (total += qty);
return arr;
}, [])

for (let i = 0; i < 100; i++) {

// get a random number between 1 to total
const randomChoice = Math.floor(Math.random() * total) + 1;

// get index based on the range array values
const index = range.findIndex(v => v >= randomChoice)

console.log('Your prize is ' + prizes.tshirts[index].tshirtName, randomChoice);
}

关于javascript - 从数组中的多个中查找百分比并偶然返回整个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55616022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com