js实现从数组里随机获取元素

JavaScript05

js实现从数组里随机获取元素,第1张

这篇文章主要介绍了js实现从数组里随机获取元素的方法,以及个人封装的js代码分享,十分的实用,这里推荐给小伙伴们

基础知识:

复制数组:

(1)循环遍历复制(不推荐)

代码如下:

var

arry

=

[1,5,9,7],

new_arry

=

[],

n

=

0,

len

=

arry.length

for(n<lenn++){

new_arry.push(arry[n])

}

(2)concat()

方法用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本

代码如下:

var

arry

=

[1,5,9,7],

new_arry

=

arry.concat()

console.log(new_arry)

(3)slice()

方法可从已有的数组中返回选定的元素

代码如下:

var

arry

=

[1,5,9,7],

new_arry

=

arry.slice(0)

console.log(new_arry)

随机数:

Math.random()

Math.random(),返回0到1的随机数,如:0.4261967441998422

个人封装函数:

代码如下:

function

getRandom(opt)

{

var

old_arry

=

opt.arry,

range

=

opt.range

//防止超过数组的长度

range

=

range

>

old_arry.length?old_arry.length:range

var

newArray

=

[].concat(old_arry),

//拷贝原数组进行操作就不会破坏原数组

valArray

=

[]

for

(var

n

=

0

n

<

range

n++)

{

var

r

=

Math.floor(Math.random()

*

(newArray.length))

valArray.push(newArray[r])

//在原数组删掉,然后在下轮循环中就可以避免重复获取

newArray.splice(r,

1)

}

return

valArray

}

var

new_val

=

getRandom({'arry':[1,6,8,0,3],'range':3})

console.log(new_val)

是不是很好用呢,非常实用的代码,这里是从本人项目中分离出来分享给大家,希望对大家有所帮助。

用查找数组去重复的效率极低,应该用Object或者JS2015的Set对象做

const s = new Set()

while(s.size<10)

s.add(parseInt(Math.random()*10))

console.log(s) Set { 2, 7, 0, 4, 9, 3, 6, 1, 8, 5 }

读下来你的代码,好像在写随机一共10以内10个数还要去重。就可能不是要为了去重,而是想数组洗牌,就该用常见的算法。

function shuffleArray(a) {

   for(var i=a.length-1 i>0 i--) {

       var j = Math.floor(Math.random() * (i + 1))

       var t= a[i] a[i] = a[j] a[j] = t

   }

}

const a=[]

for(var i=0i<10i++) a.push(i)

shuffleArray(a)

console.log(a) [ 0, 6, 7, 8, 3, 5, 1, 2, 4, 9 ]

var a = [1,2,3,3,4,5,6,7,8,9]

function sendNum(arr)

{

    return arr[Math.floor(Math.random()*arr.length)]

}

sendNum(a)

这样就可以实现每次返回是一个随机数组中的一个数。主要用的就是random的方法。random方法,是返回(0,1] 的数,但取不到1,所以用Math.floor向下取整。