随机取出100条数据(取出的数据不能重复)
描述:
从一个长度10万的数组中,随机取出100条数据(取出的数据不能重复)
分析
- 原理:随机获取100个索引,每一次获取的时候,都把对应的项获取,为了避免数组中的项重复,每获取一个数把原有数组中的这一项删除;
- 为了方便演示从20个里取5个随机数;
实现
- 第一种比较耗性能的写法;
var ary=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
function selectOption(ary,optionNumber){
var targetAry=[];
if(!optionNumber){
console.log("请指定需要删选的数量!");
}
for(var i=0;i<optionNumber;i++){
var ran=Math.round(Math.random()*(ary.length));//获取0-数组最大索引的一个随机数;
targetAry.push(ary[ran]);//按照获取的随机索引,把对应的值取出来,放到新书组中;
ary.splice(ran,1);//数组中实现删除的时候比较耗性能,为了牵扯到数组长度的改变,数组被删除的项,后面所有数据都前进一位;
}
return targetAry;
}
var newAry=selectOption(ary,2);
console.log(newAry);
确定在代码后面已经说明,这种的比较耗性能;
var ary=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
function selectOption(ary,optionNumber){
var targetAry=[];
if(!optionNumber){
console.log("请指定需要删选的数量!");
}
for(var i=0;i<optionNumber;i++){
var ran=Math.round(Math.random()*(ary.length));//获取0-数组最大索引的一个随机数;
targetAry.push(ary[ran]);//按照获取的随机索引,把对应的值取出来,放到新数组中;
ary[ran]=ary[ary.length-1];//把数组最后一项放到当前要删除索引的这一项;
ary.length=ary.length-1;//删除最后一项;
}
return targetAry;
}
var newAry=selectOption(ary,10);
console.log(newAry);
这种的写法,是操作数组的常用处理方式;借助数组length可修改的性能;