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

Pure JS Coding Challenge01 — 双色球彩票

时间:2022-09-26 10:46:30浏览次数:80  
标签: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/39346/28562610

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

相关文章

  • 详解JS中 call 方法的实现
    摘要:本文将全面的,详细解析call方法的实现原理本文分享自华为云社区《关于JavaScript中call方法的实现,附带详细解析!》,作者:CoderBin。本文将全面的,详细解析call方法的......
  • react的jsx语法是怎样解析的
    首先我们来看看下面的代码import"react"from"react";constelement=(<div><div><span>1</span><span>2</span>......
  • jsp
     Author:GavinVersion:9.0.2一、引言1.1现有问题二、JSP(JavaServerPages)2.1概念2.2作用三、JSP开发【重点】3.1创建JSP3.1.1JSP编写Java代码3.1.2访问JSP3.2......
  • tomcat 访问日志转json
    一、安装jdk、tomcatcat install_tomcat.sh #!/bin/bashJDK_FILE="jdk-8u341-linux-x64.tar.gz"#JDK_FILE="jdk-8u281-linux-x64.tar.gz"TOMCAT_FILE="apache-tomc......
  • Chrome插件开发background_js支持跨域请求与返回async和await的处理
    background.js的配置chrome.runtime.onMessage.addListener((request,sender,sendResponse)=>{switch(request.type){case'fetchChromeXmlrpc':......
  • Jackson 解析 JSON 详细教程
    点赞再看,动力无限。微信搜「程序猿阿朗」。本文Github.com/niumoo/Java…和未读代码博客已经收录,有很多知识点和系列文章。JSON对于开发者并不陌生,如今的WEB......
  • js数组去重的方法
    一、利用Set()+Array.from()Set对象:是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即Set中的元素是唯一的。Array.from() 方法:对一个类似数组......
  • vue.config.js 的完整配置(超详细)!
    今天分享一下,我们项目当中的一些webpack配置,希望能给大家有所启发;只要配置多了,你就会发现其实所有的配置的都是相似的,尤其像插件的配置,都是十分相似的。我们现在开始进......
  • JsonWebToken
    (一)JsonWebToken是什么?JSONWebToken是一个开放标准协议,它定义了一种“紧凑”和“自包含”的方式,它用于各方之间作为JSON对象安全地传输信息。紧凑:数据量较少,并且能通过......
  • 【golang】json数据解析 - 嵌套json解析
    @目录1.通过结构体映射解析2.嵌套json解析-map1.通过结构体映射解析原数据结构解析//结构体typecontractJsonstruct{ Data[]transaction`json:"data"` T......