js实现抽奖的两种方法

yizhihongxing

下面给出JS实现抽奖的两种方法的完整攻略。

方法一:用Math.random()生成随机数

1.创建一个数组,用来存储奖品种类和对应的中奖概率,例如:

let awards = [
    {name: '一等奖', probability: 0.1},
    {name: '二等奖', probability: 0.2},
    {name: '三等奖', probability: 0.3},
    {name: '谢谢参与', probability: 0.4}
];

2.生成一个随机数,范围为0到1。

let randomNumber = Math.random();

3.遍历奖品数组,根据每个奖品的中奖概率,判断随机数是否在该奖品的中奖范围内,若是则返回该奖品名称,若否则继续遍历,直到遍历完所有奖品。

function lottery(awards) {
  let randomNumber = Math.random();
  let start = 0;
  for (let i=0; i<awards.length; i++) {
    let award = awards[i];
    if (randomNumber > start && randomNumber < start + award.probability) {
      return award.name;
    }
    start += award.probability;
  }
}

4.调用lottery()函数,根据返回值判断中奖结果。

示例一:实现一个简单的抽奖页面,包括一个按钮和一个显示中奖结果的区域。

HTML代码:

<button onclick="showResult()">开始抽奖</button>
<div id="result"></div>

JS代码:

function showResult() {
  let result = lottery([
    {name: '一等奖', probability: 0.1},
    {name: '二等奖', probability: 0.2},
    {name: '三等奖', probability: 0.3},
    {name: '谢谢参与', probability: 0.4}
  ]);
  document.getElementById('result').innerHTML = result;
}

示例二:实现一个抽奖轮盘,可以使用CSS实现轮盘样式,JS代码类似于示例一,只需要修改显示方式即可。

方法二:使用Fisher-Yates随机排序算法

1.创建一个数组,用来存储所有待抽奖人员的名字,或者用数字表示不同奖项,例如:

let participants = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '吴九', '郑十'];

2.定义一个数组用来存储抽奖结果,数组长度和奖品个数相同。

3.使用Fisher-Yates随机排序算法对参与抽奖人员的数组进行随机排序。

function shuffle(array) {
  for (let i=array.length-1; i>0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

4.从参与抽奖人员的数组中按顺序依次取出对应数量的人员放入抽奖结果数组,即可得到中奖结果。

function lottery(participants, awards) {
  let shuffledParticipants = shuffle(participants);
  let results = [];
  for (let i=0; i<awards.length; i++) {
    results[i] = shuffledParticipants[i];
  }
  return results;
}

5.调用lottery()函数,获取中奖结果。

示例一:实现一个简单的抽奖页面,包括一个按钮和一个显示中奖结果的区域。

HTML代码:

<button onclick="showResult()">开始抽奖</button>
<div id="result"></div>

JS代码:

function showResult() {
  let participants = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '吴九', '郑十'];
  let awards = ['一等奖', '二等奖', '三等奖', '谢谢参与'];
  let results = lottery(participants, awards);
  document.getElementById('result').innerHTML = results.join('<br>');
}

示例二:实现一个网站注册时的邀请码生成功能,邀请码是一个8位随机字符串,每个字符可以是0-9数字或26个字母。

JS代码:

function generateInviteCode() {
  let participants = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  let awards = new Array(8).fill(0);
  for (let i=0; i<8; i++) {
    awards[i] = participants[Math.floor(Math.random()*participants.length)];
  }
  return awards.join('');
}

调用generateInviteCode()函数,即可生成随机的8位邀请码。

以上就是JS实现抽奖的两种方法的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现抽奖的两种方法 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javaScript合并对象的多种方式示例

    下面是“JavaScript合并对象的多种方式示例”的完整攻略。 为什么需要合并对象? 在JavaScript中,对象是一个非常常用的数据类型,我们经常需要将多个对象进行合并,以实现代码的复用和更好的管理。具体应用场景举例如下: 合并默认选项和用户自定义选项,以实现更好的用户体验。 合并多个配置文件,以实现更好的配置管理。 合并多个对象,以获得更好的计算结果…

    JavaScript 2023年5月27日
    00
  • Unicode中的CJK(中日韩统一表意文字)字符小结

    Unicode中的CJK(中日韩统一表意文字)字符小结 什么是CJK字符 CJK字符是指中文、日文、韩文等东亚文字的一种统称。CJK字符的特点是字形复杂,有很多笔画,而且其中有很多类似的字形。为了便于处理这些东亚文字,Unicode(标准化的字符编码系统)将CJK字符统一编码为一组字符集,称为CJK统一表意字符集。 CJK字符在Unicode中的编码 在Un…

    JavaScript 2023年5月19日
    00
  • ie下动态加态js文件的方法

    在IE下动态加载JS文件有几种方法,我会分别介绍其中两种,分别是使用<script>标签动态插入和使用XMLHttpRequest进行异步加载。 使用标签动态插入 在IE中,可以通过向DOM树中添加<script>标签来动态加载JS文件。 function loadScript(url, callback) { var script …

    JavaScript 2023年5月27日
    00
  • JS调用安卓手机摄像头扫描二维码

    JS调用安卓手机摄像头扫描二维码的完整攻略如下: 1. 引入zxing库 首先,需要引入zxing库,zxing是一个开源的二维码扫描库,由于JavaScript是无法直接访问手机底层的,需要借助安卓的WebView技术,我们可以使用WebView加载一个包含zxing库的html页面,这样就可以在WebView中调用zxing库实现扫描二维码的功能。 2.…

    JavaScript 2023年6月11日
    00
  • JavaScript比较同一天的时间大小实例代码

    在JavaScript中,可以使用Date对象来比较同一天的时间大小。以下是完整的攻略。 1. 创建Date对象 在比较和取得时间大小之前,需要先创建两个不同的Date对象表示不同的时间。可以使用以下方式创建Date对象: const date1 = new Date(‘2021-11-01 12:00:00’); const date2 = new Dat…

    JavaScript 2023年5月27日
    00
  • JavaScript驾驭网页-DOM

    JavaScript驾驭网页-DOM攻略 DOM(Document Object Model)是一种表述HTML、XML等文档的标准模型,由节点树构成,后续操作都基于节点树上的节点。 1. 获取元素 想要驾驭网页,首先需要获取要操作的元素。 1.1 通过id获取元素 let element = document.getElementById("el…

    JavaScript 2023年6月10日
    00
  • Document 对象的常用方法

    下面是关于 Document 对象的常用方法的详细讲解: Document 对象 Document 对象表示当前页面的文档。它是 window 对象的一个属性。可以通过 window.document 或者 document 来访问这个对象。 常用方法 以下是常用的 Document 对象方法: 1. getElementById 方法名:getElemen…

    JavaScript 2023年6月10日
    00
  • JavaScript判断表单为空及获取焦点的方法

    JavaScript判断表单为空及获取焦点的方法 在网站表单验证中,判断表单是否为空是常见的一项验证操作,同时在用户填写表单时,我们还需要将焦点放在未填写的表单输入框上,给予用户更好的输入体验。 以下是使用JavaScript实现表单验证和获取焦点的方法: 1. 使用JavaScript判断表单是否为空 JavaScript判断表单是否为空,通常使用表单的v…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部