JS求多个数组的重复数据_java

今天朋友问了我这个问题:JS求多个数组的重复数据 

注:
1.更准确的说是只要多个数组中有两个以上的重复数据,那么这个数据就是我需要的
2.单个数组内的数据不存在重复值(当然如果有的话,你可以去重)
3.耗时问题,这一点很重要 

源代码: 

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>获取多个数组中的重复数据</title>
</head>
<body>
 <script type="text/javascript">

 //计算用时
 function useTime(date1,date2){

 var date3=date2.getTime()-date1.getTime() //时间差的毫秒数

 //计算出相差天数
 var days=Math.floor(date3/(24*3600*1000))

 //计算出小时数

 var leave1=date3%(24*3600*1000) //计算天数后剩余的毫秒数
 var hours=Math.floor(leave1/(3600*1000))
 //计算相差分钟数
 var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数
 var minutes=Math.floor(leave2/(60*1000))
 //计算相差秒数
 var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数
 var seconds=Math.round(leave3/1000)
 return "用时:"+days+" "+hours+":"+minutes+":"+seconds+" "+leave3%1000;//+"''";
 }

 //返回min,max之间的数组成的数据,长度为max-min+1(数据是固定的,只是顺序随机)
 function getArr(min,max){
 var arr = [];
 var numToPush = min;
 for (var i = 0; i < max-min+1; i++) {
 var len = arr.length;
 if (len==0) {
  arr.push(numToPush++);
 }else{
  var randIndex = Math.floor(Math.random()*len);
  arr.push(numToPush++);
  //arr中的某一位跟最后一位交换
  var tmp = arr[randIndex];
  arr[randIndex] = arr[len];
  arr[len] = tmp;
 }
 }
 return arr;
 }

 //返回min,max之间的数组成的数据,个数为num(数据随机)
 function randomArr(min,max,num){
 var arr = [];
 for (var i = 0; i < num; i++) {
 var randomNumber = Math.floor(Math.random()*(max-min)+min);
 var inArr = false;
 for (var i = 0; i < arr.length; i++) {
  if(arr[i]==randomNumber){
  inArr = true;
  num--;
  break;
  }
 }
 if (!inArr) {
  arr.push(randomNumber);
 }
 }
 return arr;
 }

 //获取重复的数据
 function getDumplicate(){
 var num = arguments.length;
 if (num<2) { return [];};
 var obj = {
 ret:[], //存储相同的数据
 container:[] //存储不同的数据
 }
 for (var i = 0; i < 3; i++) {
 // console.log(arguments[i]);
 var arr = arguments[i];
 obj = deal(arr,obj);
 }
 return obj;
 }

 //处理单个数组,跟容器中的数据比较,并获得重复数据(问题:数据量太大会造成容器中的数据过多)
 function deal(arr,obj){
 var len = obj.container.length;
 if(len==0) {
 obj.container = arr;
 }else{
 var arrlen = arr.length;
 for (var j = 0; j < arrlen; j++) {//遍历数组,每个元素都跟container比较

  var conlen = obj.container.length;
  var intoContainer = false;
  for (var i = 0; i < conlen; i++) {
  var conValue = obj.container[i];
  if(arr[j]==conValue){ //重复的放入ret
  obj.ret.push(arr[j]);
  intoContainer = true;
  }
  }
  if(intoContainer&&!inArr(arr[j],obj.container)){
  obj.container.push(arr[j]); //不重复的放入容器
  }
 }
 }
 return obj;
 }

 //检测数组中是否已经存在这个数据
 function inArr(obj,arr){
 var exist = false;
 var len = arr.length;
 for (var i = 0; i < len; i++) {
 if (arr[i]==obj) {
  exist = true;
 }
 }
 return exist;
 }

 //-------------------------测试--------------------------------------------
 var date = new Date();

 var arr_a = getArr(1,20);
 var arr_b = getArr(18,35);
 var arr_c = getArr(34,50);
 var dumpData= getDumplicate(arr_a,arr_b,arr_c);
 console.log(dumpData.ret);
 //console.log(dumpData.container);
 console.log(useTime(date,new Date()));

 console.log("-----------------数据更加随机-----------------------");

 var date1 = new Date();
 // console.log(randomArr(1,100,10));
 console.log(getDumplicate( 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());
 console.log(useTime);

 </script>
</body>
</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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索js数组重复数据
java数组去除重复数据、java数组去重复、java判断数组重复元素、java数组去重复元素、java数组去掉重复值,以便于您获取更多的相关知识。

时间: 2024-11-01 09:26:40

JS求多个数组的重复数据_java的相关文章

JS数组去掉重复数据只保留一条的实现代码_javascript技巧

非常不多说,js数组去掉重复数据的代码如下所示: var arr = [1,2,3,4,5,6,1,6,7,2]; var newArr = []; for(var i =0;i<arr.length-1;i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } } 下面再给大家分享高效率去掉js数组中重复项 Array类型并没有提供去重复的方法,如果要把数组的重复元素干掉,那得自己想办法: function unique(ar

php数组去重复数据示例

 这篇文章主要介绍了php数组去重复数据示例,有时候获得的php数组中总是出现value重复的,使用下面的方法就可以去掉重复数据 以数字开头的重复数据如:    代码如下: Array (  [0] => 100  [k1] => 100  [1] => 2123  [k2] => 2123  )     该方法可以将以数字为key的值去掉,先将数组按照key倒序排序,然后用array_unique的方法将重复的值去掉. 不能适用于下面的情况:不同的key值存在相同的value的情

C# 移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =

asp.net 获取数组中重复数据代码

asp教程.net 获取数组中重复数据代码 下面提供了五款不同方法的取出数据中重复的数据并统计重复的次数. dictionary<int, int> dic = new dictionary(); int[] arr = new int[] { 1, 5, 2, 6, 7, 1, 5, 4, 1, 6, 8, 7, 6 }; foreach(int i in arr) {   try   {   dic.add(i, i);   }   catch(exception err)   {   /

php获取数组中重复数据的两种方法

(1)利用php提供的函数,array_unique和array_diff_assoc来实现 复制代码 代码如下: <?php function FetchRepeatMemberInArray($array) { // 获取去掉重复数据的数组 $unique_arr = array_unique ( $array ); // 获取重复数据的数组 $repeat_arr = array_diff_assoc ( $array, $unique_arr ); return $repeat_arr;

php获取数组中重复数据的两种方法_php技巧

(1)利用php提供的函数,array_unique和array_diff_assoc来实现 复制代码 代码如下: <?php function FetchRepeatMemberInArray($array) {     // 获取去掉重复数据的数组     $unique_arr = array_unique ( $array );     // 获取重复数据的数组     $repeat_arr = array_diff_assoc ( $array, $unique_arr );    

php数组去重复数据示例_php实例

以数字开头的重复数据如: 复制代码 代码如下: Array ( [0] => 100 [k1] => 100 [1] => 2123 [k2] => 2123  )  该方法可以将以数字为key的值去掉,先将数组按照key倒序排序,然后用array_unique的方法将重复的值去掉.不能适用于下面的情况:不同的key值存在相同的value的情况 复制代码 代码如下: function array_unique_value($arr = array()){      array_mu

php去除数组中重复数据_php实例

废话不多说,直接上代码 复制代码 代码如下: /**          * 给数组排重          * 与array_unique函数的区别:它要求val是字符串,而这个可以是数组/对象          *          * @param unknown_type $arr 要排重的数组          * @param unknown_type $reserveKey 是否保留原来的Key          * @return unknown          */       

php 给数组去除重复数据的自定义函数

 代码如下 复制代码 /**  * 给数组排重  * 与array_unique函数的区别:它要求val是字符串,而这个可以是数组/对象  *  * @param unknown_type $arr 要排重的数组  * @param unknown_type $reserveKey 是否保留原来的Key  * @return unknown  */ static function m_ArrayUnique($arr, $reserveKey = false) { if (is_array($a