一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - JS求多個數(shù)組的重復(fù)數(shù)據(jù)

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

2020-06-14 11:40PheonixHkbxoic JAVA教程

這篇文章主要介紹了JS求多個數(shù)組的重復(fù)數(shù)據(jù)的辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天朋友問了我這個問題:JS求多個數(shù)組的重復(fù)數(shù)據(jù) 

注:
1.更準確的說是只要多個數(shù)組中有兩個以上的重復(fù)數(shù)據(jù),那么這個數(shù)據(jù)就是我需要的
2.單個數(shù)組內(nèi)的數(shù)據(jù)不存在重復(fù)值(當然如果有的話,你可以去重)
3.耗時問題,這一點很重要 

源代碼: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>獲取多個數(shù)組中的重復(fù)數(shù)據(jù)</title>
</head>
<body>
 <script type="text/javascript">
 
 //計算用時
 function useTime(date1,date2){
 
 var date3=date2.getTime()-date1.getTime() //時間差的毫秒數(shù)
 
 
 //計算出相差天數(shù)
 var days=Math.floor(date3/(24*3600*1000))
 
 //計算出小時數(shù)
 
 var leave1=date3%(24*3600*1000) //計算天數(shù)后剩余的毫秒數(shù)
 var hours=Math.floor(leave1/(3600*1000))
 //計算相差分鐘數(shù)
 var leave2=leave1%(3600*1000) //計算小時數(shù)后剩余的毫秒數(shù)
 var minutes=Math.floor(leave2/(60*1000))
 //計算相差秒數(shù)
 var leave3=leave2%(60*1000) //計算分鐘數(shù)后剩余的毫秒數(shù)
 var seconds=Math.round(leave3/1000)
 return "用時:"+days+" "+hours+":"+minutes+":"+seconds+" "+leave3%1000;//+"''";
 }
 
 
 //返回min,max之間的數(shù)組成的數(shù)據(jù),長度為max-min+1(數(shù)據(jù)是固定的,只是順序隨機)
 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之間的數(shù)組成的數(shù)據(jù),個數(shù)為num(數(shù)據(jù)隨機)
 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;
 }
 
 
 //獲取重復(fù)的數(shù)據(jù)
 function getDumplicate(){
 var num = arguments.length;
 if (num<2) { return [];};
 var obj = {
 ret:[], //存儲相同的數(shù)據(jù)
 container:[] //存儲不同的數(shù)據(jù)
 }
 for (var i = 0; i < 3; i++) {
 // console.log(arguments[i]);
 var arr = arguments[i];
 obj = deal(arr,obj);
 }
 return obj;
 }
 
 //處理單個數(shù)組,跟容器中的數(shù)據(jù)比較,并獲得重復(fù)數(shù)據(jù)(問題:數(shù)據(jù)量太大會造成容器中的數(shù)據(jù)過多)
 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++) {//遍歷數(shù)組,每個元素都跟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){ //重復(fù)的放入ret
  obj.ret.push(arr[j]);
  intoContainer = true;
  }
  }
  if(intoContainer&&!inArr(arr[j],obj.container)){
  obj.container.push(arr[j]); //不重復(fù)的放入容器
  }
 }
 }
 return obj;
 }
 
 //檢測數(shù)組中是否已經(jīng)存在這個數(shù)據(jù)
 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("-----------------數(shù)據(jù)更加隨機-----------------------");
 
 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>

結(jié)果:

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

我們測試更多數(shù)據(jù):隨機產(chǎn)生3個數(shù)組,共計3W條數(shù)據(jù)

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

結(jié)果: 

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

5個數(shù)組5W數(shù)據(jù):(數(shù)據(jù)分布:1W/數(shù)組)

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

5個數(shù)組10W數(shù)據(jù):(數(shù)據(jù)分布:5W,4W,3W,2W,1W)

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

10個數(shù)組10W數(shù)據(jù):(數(shù)據(jù)分布:1W/數(shù)組)

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

100個數(shù)組100W數(shù)據(jù):(數(shù)據(jù)分布:1W/數(shù)組)

JS求多個數(shù)組的重復(fù)數(shù)據(jù)

結(jié)論:
1.耗時的多少取決于你的算法
2.總數(shù)據(jù)不變的情況下:數(shù)組個數(shù)盡量多,單個數(shù)組的數(shù)據(jù)不能太多.當然不能一概而論
3.本測試中,單個數(shù)組1W數(shù)據(jù)還行,5W數(shù)據(jù)不死,10W數(shù)據(jù)請找華佗 

問題:
1.算法是臨時寫的(其實沒什么算法^_^),有待改進
2.測試代碼中使用了一個數(shù)組容器,用于存儲不重復(fù)的數(shù)據(jù).
那么問題來了:數(shù)據(jù)量太大會造成容器中的數(shù)據(jù)過多,然后..你懂的.
3.測試數(shù)據(jù)是隨機生成的,并且只有數(shù)字.如果是其他對象,請另行測試(主要是測試數(shù)據(jù)不好生成(⊙o⊙)…)
4.多維數(shù)組未測試(測試性能也不一定好0_0)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 忘忧草研究院一二三 | chinese男同志gay免费 | 999任你躁在线精品免费不卡 | www.久久av.com| 国产精品国产精品国产三级普 | 手机看片国产免费久久网 | 小仙夜晚慰自催眠mp3护士篇 | 俄罗斯图书馆无打码久久 | 欧美在线一级片 | 色淫影院| 九二淫黄大片看片 | 美女扒开屁股 | 亚洲高清国产拍精品动图 | 视频一本大道香蕉久在线播放 | 国产精品美女福利视频免费专区 | 办公室强行丝袜秘书啪啪 | 免费观看在线永久免费xx视频 | 欧美成人在线影院 | 狠狠色综合久久婷婷 | 99只有精品| 无遮挡h肉动漫在线观看电车 | 春光乍泄在线 | 胸大的姑娘中文字幕视频 | 国自产在线精品免费 | 亚洲成a人不卡在线观看 | 希望影院高清免费观看视频 | 国产亚洲精品日韩香蕉网 | 男人边吃奶边做好爽视频免费 | 清清草在线视频 | 国产日韩欧美综合一区二区三区 | 成人150p| 女人叉开腿让男人捅 | 石原莉奈adn093店长未婚妻 | 欧美日韩一区二区三在线 | 欧美成人日韩 | 男人天堂色男人 | 校花被老头夺去第一次动图 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 边摸边吃奶玩乳尖视频 | 国士李风起全文在线阅读 | 亚洲码和乱人伦中文一区 |