首页 > 其他分享 >Pure JS Coding Challenge01 — 双色球彩票

Pure JS Coding Challenge01 — 双色球彩票

时间:2022-09-24 10:33:06浏览次数:79  
标签:redBalls 函数 红球 Coding JS redRandomBalls Challenge01 选中 蓝球

Pure JS Coding Challenge01 — 双色球彩票

功能说明:

双色球由33个红球和16个蓝球组成,一记双色球包括6个不重复的红球和1个蓝球。

请阅读给定的页面和代码,完成randomFn函数,实现3秒后随机抽奖的功能。要求如下:

函数返回:
1、以字符串的形式输出“随机一注”的开奖结果,选中的红蓝球用“|”隔开,红球在前,数字用逗号隔开,如为“06,10,13,18,23,27|05”。
2、红蓝球的输出编号不能重复,按升序排列。

页面交互:
1. 用 'class=”active” 高亮选中的红蓝球(页面上对应的 DOM 元素)。
2. 将选中的球从小到大排列,并移动到所属组的最前面。页面上球的顺序应该与函数返回结果的顺序相对应,如图所示。

结果显示:

原始代码:

您可以切换以下选项卡以查看相应的页面结构。

功能分析:

(1) 功能一:随机数

我们可以使用 Math.random() 函数。该函数返回一个大于或等于 0 且小于 1 的浮点伪随机数,在该范围内近似均匀分布,即 [0,1)。题中红球的范围是1-33的整数,蓝球的范围是1-16的整数,所以需要扩大范围。我们可以封装一个函数,传入范围的最小值和最大值,得到扩展值。

 函数 getRandom(min, max) { 常量值 = Math.random() * (max - min) + min 返回 Math.ceil(值) }

(2) 功能二:选中的球高亮显示,不能重复。

蓝球:只抽取一个,不存在重复问题。

红球:需要随机生成6个数字。由于选中的球不能重复,我们可以使用“set”来保存选中的球。

 让 redBalls = document.querySelectorAll('.red .balls-wp b') 让设置 = 新设置() for (让 i = 1; set.size < 6; i++) { const num = getRandom(1, 33) redBalls[num - 1].classList.add('active') set.add(redBalls[num - 1])  
 }

(3) 功能三:将选中的球移动到当前组的前面,并按升序排列。

我们可以使用 insertBefore() 方法来实现 move 和 sort() 方法来对球进行排序。

由于 6 个红球不仅要从小到大排序,还要将选中的 6 个球放在其他球的前面,并且 '' parentNode.insertBefore(newNode, referenceNode) ''一次只能插入一个子节点,所以我们需要把6个球按降序排列(得到redRandomBalls数组),然后每次以第一个元素redBalls[0]为参考点,元素从 redRandomBalls 中取出并插入到组中。

 让 redRandomBalls = [...set].sort((x, y) => y.innerHTML - x.innerHTML) for (让 i = 0; i < 6; i++) { redParent.insertBefore(redRandomBalls[i], redBalls[0]) }

由于我们通过 document.querySelectorAll() 一开始,此方法收集一组静态节点。但是,每次我们在循环中插入元素时,红球组中的节点顺序都会发生变化。在节点之前,我们都必须获取集合中最新的第一个元素。

 让 redRandomBalls = [...set].sort((x, y) => y.innerHTML - x.innerHTML) for (让 i = 0; i < 6; i++) {  **redBalls = document.querySelectorAll('.red .balls-wp b')**  redParent.insertBefore(redRandomBalls[i], redBalls[0]) }

(4)函数4:函数返回结果

我们在红球中得到的redRandomBalls是一个降序排列的节点列表,但是我们的函数想要返回的只是球上的数字,所以我们需要通过“ 地图 ”,然后通过sort对数字进行升序排序,最后将得到的数组转换为“,”形式的字符串。

 const redRandom = redRandomBalls.map(item => item.innerHTML).sort((x, y) => x - y).join(',')

对于蓝球,我们还需要对结果进行处理,保证最终结果是两位数。

 蓝色随机 < 10 ? '0' + blueRandom : blueRandom

最终代码如下:

这是 链接 在 GitHub 上。希望这篇文章对你练习js有所帮助。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/38918/24052410

标签:redBalls,函数,红球,Coding,JS,redRandomBalls,Challenge01,选中,蓝球
From: https://www.cnblogs.com/amboke/p/16725067.html

相关文章

  • python-json
    pythonjson处理json写入json文件点击查看代码importjsonjson_data={"name":"Tom","age":18,"score":{"math":98,"chines......
  • 前端Node.js-Day38
    mysql操作数据库查询语句:使用select查询,得到的结果是数组形式。db.query('select*fromseven',(err,res)=>{//查询失败if(err)returnconsole.log('......
  • JS数据类型及运算符
     一.数据类型js的数据类型分为原始型数据类型和引用型类型原始类型分为数值型、字符串型、布尔型、未定义型、空​1、数值型常见数字​浮点型1.232.343.1415e1=>31.41......
  • JS 打开一个链接
    我们知道在HTML打开链接的方法就是定义href如下面的代码:<div><ahref="javascript:void(0);"@click="openBlogDetail(item.id)"class="text-primary">Read......
  • JS入门
    JavaScript一.Js概述js是一种可以运行在浏览器,也可以运行在服务端的的语言;浏览器可以实现用户的交互效果,可以进行后端开发。例如:操作数据库,调用其他服务器​特点:无......
  • Vue2项目解决-js/css文件无法引用问题
    打包:    在vue.config.js文件中  const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({  transpileDependencies:t......
  • JSX反应语法-转载
    JSX语法详解在之前的react基础文章中,创建元素使用的是React.createElement()方法,利用方法创建单层元素还算可以,可是如果出现嵌套结构,使用这种方法就会比较繁琐而且......
  • 解决golang json: unsupported value: NaN
    遇到这种json:unsupportedvalue:NaN大部分是因为我们处理数值型的数据时,出错,导致变成了NaNnoanumber然后序列化json的时候,如果值是NaN,就会出现这个错误 仔细......
  • js与jquery实例-拖动改变列宽和行高
     js与jquery实例-拖动改变列宽和行高如何通过javascript或者jquery实现改变表格宽度或者行高的功能?今天就把这个功能代码分享给大家,绝对原创哦,代码少而且易懂。先看效果......
  • WKWebView 注入JS代码
    初始化时进行注入WKWebViewConfiguration*config=[[WKWebViewConfigurationalloc]init]; //实际上注入js文件和注入js代码字符串没有区别,因为也要把JS文件......