JS求多个数组的重复数据
今天朋友问了我这个问题:JS求多个数组的重复数据
注:
1.更准确的说是只要多个数组中有两个以上的重复数据,那么这个数据就是我需要的
2.单个数组内的数据不存在重复值(当然如果有的话,你可以去重)
3.耗时问题,这一点很重要
源代码:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>获取多个数组中的重复数据</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 10 //计算用时 11 function useTime(date1,date2){ 12 13 var date3=date2.getTime()-date1.getTime() //时间差的毫秒数 14 15 16 //计算出相差天数 17 var days=Math.floor(date3/(24*3600*1000)) 18 19 //计算出小时数 20 21 var leave1=date3%(24*3600*1000) //计算天数后剩余的毫秒数 22 var hours=Math.floor(leave1/(3600*1000)) 23 //计算相差分钟数 24 var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数 25 var minutes=Math.floor(leave2/(60*1000)) 26 //计算相差秒数 27 var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数 28 var seconds=Math.round(leave3/1000) 29 return "用时:"+days+" "+hours+":"+minutes+":"+seconds+" "+leave3%1000;//+"''"; 30 } 31 32 33 //返回min,max之间的数组成的数据,长度为max-min+1(数据是固定的,只是顺序随机) 34 function getArr(min,max){ 35 var arr = []; 36 var numToPush = min; 37 for (var i = 0; i < max-min+1; i++) { 38 var len = arr.length; 39 if (len==0) { 40 arr.push(numToPush++); 41 }else{ 42 var randIndex = Math.floor(Math.random()*len); 43 arr.push(numToPush++); 44 //arr中的某一位跟最后一位交换 45 var tmp = arr[randIndex]; 46 arr[randIndex] = arr[len]; 47 arr[len] = tmp; 48 } 49 } 50 return arr; 51 } 52 53 //返回min,max之间的数组成的数据,个数为num(数据随机) 54 function randomArr(min,max,num){ 55 var arr = []; 56 for (var i = 0; i < num; i++) { 57 var randomNumber = Math.floor(Math.random()*(max-min)+min); 58 var inArr = false; 59 for (var i = 0; i < arr.length; i++) { 60 if(arr[i]==randomNumber){ 61 inArr = true; 62 num--; 63 break; 64 } 65 } 66 if (!inArr) { 67 arr.push(randomNumber); 68 } 69 } 70 return arr; 71 } 72 73 74 //获取重复的数据 75 function getDumplicate(){ 76 var num = arguments.length; 77 if (num<2) { return [];}; 78 var obj = { 79 ret:[], //存储相同的数据 80 container:[] //存储不同的数据 81 } 82 for (var i = 0; i < 3; i++) { 83 // console.log(arguments[i]); 84 var arr = arguments[i]; 85 obj = deal(arr,obj); 86 } 87 return obj; 88 } 89 90 //处理单个数组,跟容器中的数据比较,并获得重复数据(问题:数据量太大会造成容器中的数据过多) 91 function deal(arr,obj){ 92 var len = obj.container.length; 93 if(len==0) { 94 obj.container = arr; 95 }else{ 96 var arrlen = arr.length; 97 for (var j = 0; j < arrlen; j++) {//遍历数组,每个元素都跟container比较 98 99 var conlen = obj.container.length; 100 var intoContainer = false; 101 for (var i = 0; i < conlen; i++) { 102 var conValue = obj.container[i]; 103 if(arr[j]==conValue){ //重复的放入ret 104 obj.ret.push(arr[j]); 105 intoContainer = true; 106 } 107 } 108 if(intoContainer&&!inArr(arr[j],obj.container)){ 109 obj.container.push(arr[j]); //不重复的放入容器 110 } 111 } 112 } 113 return obj; 114 } 115 116 //检测数组中是否已经存在这个数据 117 function inArr(obj,arr){ 118 var exist = false; 119 var len = arr.length; 120 for (var i = 0; i < len; i++) { 121 if (arr[i]==obj) { 122 exist = true; 123 } 124 } 125 return exist; 126 } 127 128 129 //-------------------------测试-------------------------------------------- 130 var date = new Date(); 131 132 var arr_a = getArr(1,20); 133 var arr_b = getArr(18,35); 134 var arr_c = getArr(34,50); 135 var dumpData= getDumplicate(arr_a,arr_b,arr_c); 136 console.log(dumpData.ret); 137 //console.log(dumpData.container); 138 console.log(useTime(date,new Date())); 139 140 console.log("-----------------数据更加随机-----------------------"); 141 142 var date1 = new Date(); 143 // console.log(randomArr(1,100,10)); 144 console.log(getDumplicate( randomArr(1,1000000,10000), 145 randomArr(1,1000000,10000), 146 randomArr(1,1000000,10000), 147 randomArr(1,1000000,10000), 148 randomArr(1,1000000,10000) 149 ).ret) 150 var useTime = useTime(date1,new Date()); 151 console.log(useTime); 152 153 </script> 154 </body> 155 </html>
结果:
我们测试更多数据:随机产生3个数组,共计3W条数据
结果:
5个数组5W数据:(数据分布:1W/数组)
5个数组10W数据:(数据分布:5W,4W,3W,2W,1W)
10个数组10W数据:(数据分布:1W/数组)
100个数组100W数据:(数据分布:1W/数组)
结论:
1.耗时的多少取决于你的算法
2.总数据不变的情况下:数组个数尽量多,单个数组的数据不能太多.当然不能一概而论
3.本测试中,单个数组1W数据还行,5W数据不死,10W数据请找华佗
问题:
1.算法是临时写的(其实没什么算法^_^),有待改进
2.测试代码中使用了一个数组容器,用于存储不重复的数据.
那么问题来了:数据量太大会造成容器中的数据过多,然后..你懂的.
3.测试数据是随机生成的,并且只有数字.如果是其他对象,请另行测试(主要是测试数据不好生成(⊙o⊙)…)
4.多维数组未测试(测试性能也不一定好0_0)
有什么好的意见或建议请与我联系!共勉!共同学习!
转载于:https://www.cnblogs.com/PheonixHkbxoic/p/5857674.html
JS求多个数组的重复数据相关推荐
- 关于iOS去除数组中重复数据的几种方法
在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方法 代码: NSArray *dataArr ...
- java 两个数组去重复数据_Java实现数组去除重复数据的方法详解
本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现, ...
- php数组去重复数据的小例子
2019独角兽企业重金招聘Python工程师标准>>> php数组去重复数据示例,有时候获得的php数组中总是出现value重复的,使用下面的方法就可以去掉重复数据 以数字开头的重复 ...
- C语言删除二维数组的重复数据的一个方法
C语言删除二维数组的重复数据的一个方法 //以下头文件,未及清理 #include "stdafx.h" #include <vector> #include < ...
- JS JavaScript中去除数组中重复元素的方法
JS JavaScript中去除数组中重复元素的方法 感觉比较好理解的3种方法,总结一下,大家共同学习 方法一: Array.prototype.method1 = function(){ var a ...
- php数组遍历相同的元素覆盖_php获取数组中重复数据的两种方法
搜索热词 代码如下: PHP function FetchRepeatMemberInArray($array) { // 获取去掉重复数据的数组 $unique_arr = array_unique ...
- java数组重复_JAVA数组去除重复数据
一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List list = new ArrayList();for (int i=0; i list.ad ...
- JS实现找出数组中重复的数字的三种方法
分享在JS中实现--找出数组中重复数字的方法的三种 法一. 排序比较法 先排序,再通过遍历比较,若相等,则添加到结果数组中,最后对结果数组进行去重,即可得到结果. function getSameNu ...
- 原生JS去除二维数组中重复了的一维数组
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...
最新文章
- 轻量级数据持久层Seaking.PL简介及建议征集
- Vue中使用Openlayers加载Geoserver发布的TileWMS时单击获取shp文件的坐标信息
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.15
- base64图裁剪 php_世界上最好的编程语言PHP图层裁剪服务搭建详解
- java gt_JAVA泛型知识--gt; lt;? extends Tgt;和lt;? super Tgt;
- Java高级语法笔记-匿名类(Anonymous Class)
- 牛客网——约数的个数
- hdu 3183(贪心)
- COM 组件实现事件、通知
- cxgrid定位在第一行并显示内置编辑器
- 完整的CJK Unicode范围(5.0版)
- 准谐振器和双二阶广义积分器的共同点和不同点
- 51单片机引脚功能介绍
- win7快捷关闭计算机,win7关机快捷键和重启快捷键是什么?
- 【题解】LuoGu4158:粉刷匠
- 禅道类似软件_六大Jira项目管理软件替代品
- linux mysql 登录报1045_【mysql】linux登录MySQL_报错ERROR_1045_(28000)解决办法
- 在App Store和Google Play上推广应用程序
- 操作系统的了解和安装
- 静态编译出错的解决办法 undefined reference to `clock_gett...