indexOf() 和 push()获得不重复随机数组

简介: 整体思路:先random()获取随机数,indexOf()排除相同的随机数,push()将不重复随机数添加到数组。其实一直想写这篇已经很久了,因为之前做的一个东西还不完善,有bug。所以一直拖到现在。今天中午趁机做了个总结,需要的小伙伴可以看看,做个参考。之前本来是一个很low的去重方法:先获得三个随机数,然后三个随机数分别互相比较,当出现相等的情况时,那个随机数再随机一次,然后返回那三个随机数。这个方法low在:每个数值都要比较一下,,数量少的时候,还可以写,数量多的时候,你一个个比一下试试看?

image.png写在前面:整体思路:先random()获取随机数,indexOf()排除相同的随机数,push()将不重复随机数添加到数组。其实一直想写这篇已经很久了,因为之前做的一个东西还不完善,有bug。所以一直拖到现在。今天中午趁机做了个总结,需要的小伙伴可以看看,做个参考。

微信截图_20220621152629.png

之前本来是一个很low的去重方法:


先获得三个随机数,然后三个随机数分别互相比较,当出现相等的情况时,那个随机数再随机一次,然后返回那三个随机数。这个方法low在:每个数值都要比较一下,,数量少的时候,还可以写,数量多的时候,你一个个比一下试试看?


下面是新想的方法:

先上效果:

image.png

随机获得三个box,color


页面效果:每隔一秒换一下随机box和随机颜色,不间断运行。 (下面有链接)


获取随机box,以及添加到数组里面的js代码

var num=[];//box的随机数组
var box_dom = document.getElementsByClassName("icon");//获得盒子的dom
function whileRun(){
    num=[];//继续运行的时候清空数组,不然box不会变。
    while (num.length<3){
        box_dom_num=Math.floor(Math.random()*9);
        console.log(box_dom_num);
        //随机的box赋值给box_dom_num.
        if (num.indexOf(box_dom_num)<0){//随机选择的box看有没有在原先已经添加的数组里面,如果没有,就添加进去,如果有,重新运行函数。
            num.push(box_dom_num);// 将随机选择到的box添加到数组里面去。
         }
        console.log(num);
    }
    return num;//    跳出while循环再返回数组
}


分解步骤:

random()获取随机数:


box_dom_num=Math.floor(Math.random()*9);//获取盒子的随机数,下标从0开始,随机数范围0~8;


上面这串代码的解释:盒子=随机获得0-1之间的数字*9然后进行下舍入获得的整数。

关于随机数生成这里还不太懂的同学,www.jianshu.com/p/759546b24… 移步这里。


indexOf()排除相同的随机数

首先需要知道的是indexOf()这个方法是什么,及其作用。


w3c定义和用法indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。


从这里看不出有什么跟获取随机数有什么关联的地方,但是下面的一句注释,就可以和随机数关联起来:

image.png

这是代码:


if (num.indexOf(box_dom_num)<0){//随机选择的box看有没有在原先已经添加的数组里面,如果没有,就添加进去,如果有,重新运行函数。
            num.push(box_dom_num);// 将随机选择到的box添加到数组里面去。
         }


解释:检索num这个数组里面,之前有没有出现box_bom_num。如果没有出现的话(就是不重复了),那么 (num.indexOf(box_dom_num)就会<0,然后执行下面的内容。


push()将不重复随机数添加到数组

push()定义和用法:

push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。


num.push(box_dom_num);// 将随机选择到的box添加到数组里面去。


解释:上面已经将box_dom_num去除重复随机数了,直接添加就可以。


然后:继续while循环,直到num.length<3的时候,返回已经去完重复随机数的num数组。


链接放上来,可以自己看源码obkoro1.github.io/jnshu/js-ta…



目录
相关文章
|
9月前
|
Web App开发 前端开发 JavaScript
大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?
大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?
|
9月前
|
Web App开发 前端开发 JavaScript
【面试题】大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?
【面试题】大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?
|
9月前
|
JavaScript 前端开发 安全
== 和 ===什么区别呀?
== 和 ===什么区别呀?
137 0
|
9月前
|
前端开发
在history模式中push和replace有什么区别
在history模式中push和replace有什么区别
|
9月前
ES6的Array.from({length:N})方法创建长度为N的undefined数组,等价于 [...Array(N)]
ES6的Array.from({length:N})方法创建长度为N的undefined数组,等价于 [...Array(N)]
|
JavaScript 前端开发
== 和 ===区别,分别在什么情况使用
== 和 ===区别,分别在什么情况使用
93 1
|
JavaScript 索引
JS数组常用方法(超级详细,含理解) push、pop、unshift、shift、splice、slice、concat、join、revres、indexOf、sort、filter、map
JS数组常用方法(超级详细,含理解) push、pop、unshift、shift、splice、slice、concat、join、revres、indexOf、sort、filter、map
407 0
|
JavaScript
js中push(),pop(),unshift(),shift()的用法小结
js中push(),pop(),unshift(),shift()的用法小结
140 0