题目描述:
双色球彩票由红球(33)和蓝球(16)组成,一注彩票有7个数组成(红球6个,蓝球1个)
写一个方法,随机产生1注双色球彩票(不能重复),并对号码排序。
主要知识点
Math对象
abs() 获取绝对值
ceil() 向上取证
floor() 向下取整
round() 四舍五入取整
pow(x,y) 计算x的y次方,可以使用 x**y
max() 获取一组数字最大值
min() 获取一组数字最小值
数组API
reverse() 翻转数组元素
sort() 对数组进行排序,默认是按照首个字符的编码排序
concat() 拼接多个数组,返回一个新数组
slice(start, end) 截取数组元素,start开始的下标,end结束的下标,不包含end本身;end为空截取都最后;下标为负数表示倒数;返回截取到的元素
splice(start, count, v1,v2..) 删除数组元素,start开始的下标,count删除的数量,count为空表示删除到最后,下标为负数表示倒数,v1,v2表示删除后补充的元素;返回删除的元素,原数组会发生变化
push() 在数组末尾添加元素,返回数组长度,原数组会发生变化
pop() 删除数组末尾的一个元素,返回删除的元素,原数组会发生变化
unshift() 在数组开头添加元素,返回数组长度,原数组会发生变化
shift() 删除数组开头的一个元素,返回删除的元素,原数组会发生变化
indexOf() 用于查找数组中是否含有某个元素,返回满足条件的第一个的下标,如果找不到返回-1
进阶set对象
set数据结构类似数组,但所有成员的值唯一
set本身是一个构造函数,用来生产Set数据结构,使用add方法来添加新成员
let set = new Set
操作方法
add(value):添加某个值,返回 Set 结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值。
…展开语法
展开字符串
let str = "abc"
console.log(... str)// a b c
展开数组
let arr = [1,2,3]
console.log(...arr)// 1 2 3
展开数组
let kk = {
name : 'keke',
age: 12
}
console.log({...kk})//{name:'keke',age:12}
题目解答:
一般写法(删除数组元素去重)
//声明变量保存1~33之间所有数字
var arr = [];
for (var i = 1; i <= 33; i++) {
//i代表所有整数
//添加到数组arr中
arr.push(i);
}
console.log(arr);
//准备一个空数组,用于保存取到随机元素
var arr2 = [];
//循环6次,随机取6个数字
for (var i = 0; i < 6; i++) {
//随机下标 0~32
//0~1 * 33 0~32.x 向下取整 0~32
var n = parseInt(Math.random() * arr.length);
//console.log(n);
//通过随机下标找到对应的元素 arr[n]
//把找到的元素放入到准备好的新数组arr2中
arr2.push(arr[n]);
//每次获取到随机元素后,把该元素从数组中删除
//splice(开始的下标,删除的数量)
arr.splice(n, 1);
console.log(arr.splice(n, 1));
}
//对获取到的随机进行从小到大的排序
arr2.sort(function (a, b) {
return a - b;
});
//1~16之间随机取1个数字
//只需要产生一个随机整数,然后添加到数组arr2
//0~1 * 17 0~16.x 向上取整
//0~1 * 16 0~15.x 向下取整 0~15 + 1 1~16
var blue = parseInt(Math.random() * 16) + 1;
arr2.push(blue);
console.log(arr2);
使用set去重
//去红色球的时候需要去重,蓝色球不需要
//构造一个set数组
var arr = new Set();
while (arr.size < 6) {
//floor向下取整
//ceil 向上取整
let num = Math.floor(Math.random() * 33);
arr.add(num);
}
console.log(...arr);