JS 在指定数组中随机取出N个不重复的数据

思路:每次随机从数组抽出一个数放进新的数组,然后将这个数从原数组中剔除,这个就不会抽到重复的数了*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function makeRandomArr(arrList,num){
if(num>arrList.length){
return;
}
// var tempArr=arrList.concat();
var tempArr=arrList.slice(0);
var newArrList=[];
for(var i=0;i<num;i++){
var random=Math.floor(Math.random()*(tempArr.length-1));
var arr=tempArr[random];
tempArr.splice(random, 1);
newArrList.push(arr);
}
return newArrList;
}

说明:数组的赋值,例如直接将arr1赋值给arr2,那么改变arr2,arr1也会发生改变,因为他们的都指向一个内存容器。所以我为了不改变原数组,用了下面其中一个方法。

1
2
var tempArr=arrList.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向
var tempArr=arrList.slice(0);//返回数组的拷贝数组,注意是一个新的数组,不是指向

栗子:

1
2
3
4
var testArr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];
var test=makeRandomArr(testArr,7);
console.log(test);//2,5,8,3,9,10,15
console.log(testArr);//1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17

20160606更新:如果数组原本就存在重复数据,那么应该考虑先去重,后抽取数据的方法比较稳妥

热评文章