概率的可配置化

本文介绍了一个基于权重实现随机选择的JavaScript函数。通过该函数可以指定每个选项被选中的概率,并在运行时根据这些概率随机返回一个选项。文章还提供了一个示例应用,展示了如何使用这个函数来随机抽取奖品。
function randomInProbability( weights ){
  if( arguments.length > 1 ){
    weights = [].slice.call( arguments );
  }

  var total, current = 0, parts = [],
      i = 0, l = weights.length;

  total = weights.reduce ? weights.reduce( function( a, b ){
    return a + b;
  } ) : eval( weights.join( '+' ) );

  for( ; i < l; i ++ ){
    current += weights[ i ];
    parts.push( 'if( p < ', current / total, ' ) return ', i / l, ' + n;' );
  }

  return Function( 'var p = Math.random(), n = Math.random() / ' + l + ';' + parts.join( '' ) );
}
var updateRandom = randomInProbability( 0.01, 0.02, 0.09, 1.8, 0.1 );
var objects = [ '登山包', '旅行箱', '移动电源', '谢谢参与', '不中奖' ];
var randomIndex = Math.floor( objects.length * updateRandom() ); 
var object = objects[ randomIndex ];

 

转载于:https://www.cnblogs.com/phpfensi/p/5600638.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值