js 从数组中随机抽取10个不同元素的方法
需求:从长度若干的数组中随机抽取10个不同、且不重复的元素。
一般思路:
getRandomArr = (arr) =>{
var newArr=[];
for(var i=0;i<10;i++){
var idx=parseInt(Math.random()*arr.length)
newArr.push(arr[idx])
arr.splice(idx,1)
}
}
经过使用,这个方法可能导致重复数据,数组越小几率越高。
改良版代码:
//打乱数组顺序
getArrRandomly = (arr) => {
var len = arr.length;
for (var i = len - 1; i >= 0; i--) {
var randomIndex = Math.floor(Math.random() * (i + 1));
var itemIndex = arr[randomIndex];
arr[randomIndex] = arr[i];
arr[i] = itemIndex;
}
return arr;
}
//截取打乱后的数组的前10(num)位
getRandomArr = (arr=[],num=10) => {
const tmpArr = this.getArrRandomly(arr);
let arrList = [];
for (let i = 0; i < num; i++) {
arrList.push(tmpArr[i]);
};
console.log(arrList);
}
代码思路:先打乱数组顺序,然后截取你想要的元素个数(num)
完。