今天朋友问了我这个问题:JS求多个数组的重复数据
注:1.更准确的说是只要多个数组中有两个以上的重复数据,那么这个数据就是我需要的2.单个数组内的数据不存在重复值(当然如果有的话,你可以去重)3.耗时问题,这一点很重要
源代码:
!DOCTYPE html html lang=' en ' head meta charset=' UTF-8 '标题获取多个数组中的重复数据/标题/床头柜脚本类型='text/javascript' //计算用时函数useTime(日期1,日期2){ var date 3=date 2。gettime()-日期1。gettime()//时间差的毫秒数//计算出相差天数var days=数学。楼层(日期3/(24 * 3600 * 1000))//计算出小时数var休假1=日期3%(24 * 3600 * 1000)//计算天数后剩余的毫秒数var小时=数学。楼层(左侧1/(3600 * 1000))//计算相差分钟数var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数定义变量分钟=数学。楼层(左侧2/(60 * 1000))//计算相差秒数var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数定义变量秒=Math.round(leave3/1000)返回'用时: '天' '小时' ' : '分钟' ' : '秒“leave300;//'''';} //返回最小值、最大值之间的数组成的数据,长度为最大-最小1(数据是固定的,只是顺序随机)函数getArr(min,max){ var arr=[];var numToPush=min for(var I=0;我最大-最小1;I){ var len=arr。长度;if(len==0){ arr。推送(NumToPush);} else { var randIndex=math。地板(数学。random()* len);由…改编推送(NumToPush);//arr中的某一位跟最后一位交换var tmp=arr[randIndex];arr[randIndex]=arr[len];arr[len]=tmp;} }返回arr} //返回最小值、最大值之间的数组成的数据,个数为数量(数据随机)函数randomArr(min,max,num){ var arr=[];for(var I=0;i numI){ var随机数=数学。地板(数学。random()*(max-min)min);var INar=false for(var I=0;一、长度;I){ if(arr[I]==随机数){ inArr=truenum-;打破;} } if(!inArr){ arr。push(randomNumber);} }返回arr} //获取重复的数据函数GetDumplister(){ var num=参数。长度;if(num 2){ return[];};var obj={ ret:[],//存储相同的数据container:[] //存储不同的数据} for(var I=0;I 3;i ) { //console.log(参数[I]);var arr=参数[一];交易。}返回obj} //处理单个数组,跟容器中的数据比较,并获得重复数据(问题:数据量太大会造成容器中的数据过多)函数交易。集装箱。长度;if(len==0){ obj。容器=arr} else { var arrlen=arr . length for(var j=0;j。阿伦;j ) {//遍历数组,每个元素都跟容器比较var con len=obj。集装箱。长度;var InTocontainer=false for(var I=0;我是康伦;I){ var ConValue=obj。容器[I];if(arr[j]==conValue){ //重复的放入ret obj。ret。push(arr[j]);into container=true } } if(into container!inar(arr[j],obj。容器){ obj。集装箱。push(arr[j]);//不重复的放入容器} } }返回obj} //检测数组中是否已经存在这个数据函数Inrar(obj,arr){ var exist=false;var len=arr . length for(var I=0;我透镜;I){ if(arr[I]==obj){ exist=true;} }返回存在;} //- 测试-var Date=新日期();var arr_a=getArr(1,20);var arr_b=getArr(18,35);var arr_c=getArr(34,50);var dumpData=getdumposirty(arr _ a,arr_b,arr _ c);控制台。日志(转储数据。ret);//控制台。日志(转储数据。容器);console.log(useTime(date,new Date()));console.log(' -数据更加随机- ');var日期1=新日期();//console.log(randomArr(1,100,10));控制台。log(GetDumpSisters)(randomArr(1,1000000,10000),randomArr(1,1000000,10000),randomArr(1,1000000,10000),randomArr(1,1000000,10000),randomArr(1,1000000,10000))。ret) var useTime=useTime(date1,new Date());控制台。日志(useTime);/脚本/正文/html结果:
我们测试更多的数据。随机生成3个数组,总计3W条数据
结果:
5个阵列5W数据:(数据分布:1W/阵列)
5个10W数据阵列:(数据分布:5W,4W,3W,2W,1W)
10个阵列,10W数据:(数据分布:1W/阵列)
100个阵列,100瓦数据:(数据分布:1瓦/阵列)
结论:1。需要多少时间取决于你的算法。2.在总数据不变的情况下,数组的数量尽可能多,单个数组的数据不能太多。当然,不能一概而论。3.本次测试,单个阵列1W数据还可以,5W数据没有死,10W数据应该参考华佗。
问题:1。算法是临时写的(其实没有算法_),需要改进。2.测试代码中使用数组容器来存储非重复数据。那么问题就来了:过多的数据会导致容器中的数据过多,然后.你知道的。3.测试数据是随机生成的,只有数字。如果是其他对象,请单独测试(主要是,
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。