基础知识:
复制数组:
(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 ]