js概率算法

本文介绍了两种方法实现数据随机抽取:一是使用数组和Math.random()函数按比例抽取,适用于名称与权重分配;二是通过计算区间大小判断抽取,适用于数值权重。两种方法分别应用于不同场景,适合了解JavaScript数组操作和概率抽样算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.利用数组和Math.random()函数

     		let nameArr = [
                { name: '玩游戏', value: 80 },
                { name: '看电影', value: 25 },
                { name: '搞学习', value: 5 }
            ]
			Array.prototype.sample = function () {
                if (!this.length) return;
                return this[~~(Math.random() * this.length)];
            }
            function random(list) {
                let arr = []
                list.forEach((e, i) => {
                    for (let index = 0; index < e.value; index++) {
                        arr.push(e.name)
                    }
                })
                let name = arr.sample()
                return list.findIndex(item =>item.name == name)
            };
            let index = random(nameArr)
            console.log(nameArr[index],index)//看电影 1

原理是按比例生成对应数量的数组 在数组里面随机抽取

2.利用区间大小判断对应的元素

		let nameArr = [
            { name: '玩游戏', value: 50 },
            { name: '看电影', value: 25 },
            { name: '吃东西', value: 25 },
            { name: '搞学习', value: 10 }
        ]
        let sum = nameArr.reduce((preVal, currVal) => preVal + currVal.value, 0);
        let num = Math.random() * sum
        let newArr = nameArr.sort((a, b) => a.value - b.value)
        newArr.reduce((preVal, currVal) => {
            console.log(preVal, currVal);
            currVal.maxValue = preVal + currVal.value
            return currVal.maxValue
        }, 0);
        let name = newArr.find(e => e.maxValue > num).name
        console.log(num, name);// 34.05346723293404 '看电影'

欢迎各位大佬评论区补充更好的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值