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)
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。