程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JS求多個數組的反復數據

JS求多個數組的反復數據

編輯:關於JAVA

JS求多個數組的反復數據。本站提示廣大學習愛好者:(JS求多個數組的反復數據)文章只能為提供參考,不一定能成為您想要的結果。以下是JS求多個數組的反復數據正文


明天同伙問了我這個成績: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)

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved