随机数生成器
介绍
实际工作中随机数的使用特别多,比如随机抽奖、随机翻牌。通过随机数还能实现很多有趣的效果,比如随机改变元素的位置或颜色。
本题需要在已提供的基础项目中使用JS知识封装一个函数,该函数可以根据需要,生成指定范围和个数的不重复的随机数数组。
准备
开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
其中:
·js/index.js是页面功能实现的逻辑代码。
·index.html是页面布局。
在浏览器中预览index.html页面效果如下:
当前并未生成并显示指定条件的随机数。
目标
请在index.html文件中补全函数getRandomNum中的代码,最终将根据指定条件生成的随机数显
示在页面中。
具体需求如下:
-
封装函数getRandomNum(min,maX,countNum)。
-
生成min~max范围的countNum个不重复的随机数,最终这些随机数以一个数组的形式返回。
最终实现效果如下:
最终效果图
规定
请勿修改本题默认项目代码文件夹中的文件名称、文件夹路径等,否则会导致考试系统无法正常评分。
代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="./js/index.js"></script>
</head>
<body>
<script type="text/javascript">
var testArr = getRandomNum(1, 30, 3);
document.write("<h1>1-30 以内的 3 个随机数:" + testArr + "</h1>");
testArr = getRandomNum(1, 100, 10);
document.write("<h1>1-100 以内的 10 个随机数:" + testArr + "</h1>");
</script>
</body>
</html>
.js
const getRandomNum = function(min, max, countNum) {
var arr = [];
// 在此处补全代码
return arr;
};
module.exports = getRandomNum; //请勿删除
答案
方法一
/**
* 封装函数,函数名 getRandomNum(min,max,countNum)
* 生成 min~max 范围的 countNum 个不重复的随机数,存入数组并返回
*/
//生成指定数目和范围的随机数
const getRandomNum = function(min, max, countNum) {
var arr = [];
// 在此处补全代码
for (let i = 0; i < countNum; i++) {
//1、生成随机数
let number = Math.round(Math.random() * (max - min)) + min
// 2、如果数组里已经存在该数则重新生成
while (arr.indexOf(number) !== -1) {
number = Math.round(Math.random() * (max - min)) + min
}
//3、把随机数添加到数组
arr.push(number)
}
return arr;
};
arr.indexOf()
是 JavaScript 中数组的一个方法,用于查找数组中指定元素的第一个出现的索引位置。如果数组中存在该元素,则返回该元素的索引;若不存在,则返回-1。
方法二
const getRandomNum = function(min, max, countNum) {
var arr = [];
// 在此处补全代码
//首先创建了一个空的 Set 对象
let set = new Set()
//Set 的大小达到 countNum 时循环就会结束
while (set.size < countNum) {
//生成随机数
let number = Math.floor(Math.random() * (max - min)) + min;
//随机数尝试添加到 Set 中
set.add(number)
}
//使用扩展运算符将 Set 转换为数组赋值给 arr
arr = [...set]
return arr;
};
module.exports = getRandomNum; //请勿删除
在JavaScript中,
Set
是一种特殊的类型,类似于数组,但是其成员的值都是唯一的,没有重复的值。创建一个空的Set
对象可以使用new Set()
构造函数。
大家有更简洁的写法可以一起讨论,共同进步。