最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年09月10日 08:42:19   作者:PheonixHkbxoic  
這篇文章主要介紹了JS求多個(gè)數(shù)組的重復(fù)數(shù)據(jù)的辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

源代碼: 

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>獲取多個(gè)數(shù)組中的重復(fù)數(shù)據(jù)</title>
</head>
<body>
 <script type="text/javascript">

 //計(jì)算用時(shí)
 function useTime(date1,date2){
 
 var date3=date2.getTime()-date1.getTime() //時(shí)間差的毫秒數(shù)


 //計(jì)算出相差天數(shù)
 var days=Math.floor(date3/(24*3600*1000))
 
 //計(jì)算出小時(shí)數(shù)

 var leave1=date3%(24*3600*1000) //計(jì)算天數(shù)后剩余的毫秒數(shù)
 var hours=Math.floor(leave1/(3600*1000))
 //計(jì)算相差分鐘數(shù)
 var leave2=leave1%(3600*1000) //計(jì)算小時(shí)數(shù)后剩余的毫秒數(shù)
 var minutes=Math.floor(leave2/(60*1000))
 //計(jì)算相差秒數(shù)
 var leave3=leave2%(60*1000) //計(jì)算分鐘數(shù)后剩余的毫秒數(shù)
 var seconds=Math.round(leave3/1000)
 return "用時(shí):"+days+" "+hours+":"+minutes+":"+seconds+" "+leave3%1000;//+"''";
 }


 //返回min,max之間的數(shù)組成的數(shù)據(jù),長度為max-min+1(數(shù)據(jù)是固定的,只是順序隨機(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ù),個(gè)數(shù)為num(數(shù)據(jù)隨機(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;
 }

 //處理單個(gè)數(shù)組,跟容器中的數(shù)據(jù)比較,并獲得重復(fù)數(shù)據(jù)(問題:數(shù)據(jù)量太大會(huì)造成容器中的數(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ù)組,每個(gè)元素都跟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)存在這個(gè)數(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ù)更加隨機(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é)果:

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

 

結(jié)果: 


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

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

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

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

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

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

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

相關(guān)文章

  • SpringBoot3通過GraalVM生成exe執(zhí)行文件問題

    SpringBoot3通過GraalVM生成exe執(zhí)行文件問題

    文章介紹了如何安裝GraalVM和Visual Studio,并通過Spring Boot項(xiàng)目將Java應(yīng)用程序封裝成可執(zhí)行文件(.exe)
    2024-12-12
  • SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄

    SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄

    微信的登錄功能是用戶注冊和使用微信的必經(jīng)之路之一,而微信授權(quán)登錄更是方便了用戶的登錄操作,本文主要介紹了SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄,感興趣的可以了解一下
    2023-09-09
  • 面試JAVA時(shí),問到spring該怎么回答

    面試JAVA時(shí),問到spring該怎么回答

    這篇文章主要介紹了Spring面試資料,學(xué)Java的小伙伴都知道Spring是面試的必問環(huán)節(jié),看完了一天就可掌握數(shù)據(jù)結(jié)構(gòu)和算法的面試題,快來看看吧
    2021-08-08
  • Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過程

    Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過程

    這篇文章主要介紹了Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • intellij idea tomcat熱部署配置教程

    intellij idea tomcat熱部署配置教程

    這篇文章主要介紹了intellij idea tomcat熱部署配置教程圖解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07
  • ava實(shí)現(xiàn)一致性Hash算法

    ava實(shí)現(xiàn)一致性Hash算法

    本文主要詳細(xì)介紹了Java如何實(shí)現(xiàn)一致性Hash算法,其實(shí)現(xiàn)原理將key映射到?2^32?-?1?的空間中,將這個(gè)數(shù)字的首尾相連,形成一個(gè)環(huán)。想了解更多的同學(xué),可以參考本文
    2023-03-03
  • 用IDEA如何打開文件夾

    用IDEA如何打開文件夾

    這篇文章主要介紹了用IDEA如何打開文件夾問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java Retrofit源碼層深入分析

    Java Retrofit源碼層深入分析

    這篇文章主要介紹了Java Retrofit源碼層分析,Retrofit是一個(gè)RESTful的HTTP網(wǎng)絡(luò)請求框架的封裝,網(wǎng)絡(luò)請求的工作本質(zhì)上是OkHttp完成,而Retrofit僅負(fù)責(zé)網(wǎng)絡(luò)請求接口的封裝
    2023-01-01
  • Java如何調(diào)用TSC打印機(jī)進(jìn)行打印詳解

    Java如何調(diào)用TSC打印機(jī)進(jìn)行打印詳解

    這篇文章主要給大家介紹了關(guān)于Java如何調(diào)用TSC打印機(jī)進(jìn)行打印的相關(guān)資料,文中介紹了三種方法,分別是兩種后臺打印以及JS打印 ,三種方法都給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-07-07
  • MyBatis批量添加、修改和刪除

    MyBatis批量添加、修改和刪除

    本文給大家分享mybatis批量添加,修改,刪除的實(shí)例代碼,本文代碼簡單易懂,對mybatis 批量添加、修改及刪除相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01

最新評論

喀喇沁旗| 库车县| 芮城县| 若羌县| 年辖:市辖区| 康马县| 武胜县| 江安县| 武威市| 平遥县| 晋州市| 株洲县| 安西县| 营山县| 论坛| 唐海县| 武宁县| 运城市| 宁乡县| 开鲁县| 利川市| 双江| 金门县| 黄石市| 绿春县| 乌苏市| 从化市| 仁寿县| 湘阴县| 罗甸县| 潢川县| 永丰县| 扶沟县| 铜山县| 江门市| 平江县| 湘阴县| 海城市| 高雄市| 嘉黎县| 信阳市|