aa.length一直是等於1,写了等於没写,
aa[n]!=b这个条件,打个比方,38个数裏可能只有20个没重复,那麼aa.push(b)这句话只执行了20次,再加上之前随机添加了38个,长度肯定不会等於38
代码没错,是你思路错
JavaScript生成一个数组;
数组里有十个随机数,并且不重复;
数字的范围是一到十。
根据以上要求代码如下:
function getRandomArray(){
var array = []
while (array.length < 10)
{
var random = Math.floor(Math.random() * 10) + 1
if (array.indexOf(random) < 0)
{
array.push(random)
}
}
return array
}
基础知识:复制数组:
(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)
是不是很好用呢,非常实用的代码,这里是从本人项目中分离出来分享给大家,希望对大家有所帮助。