오늘 내 친구 가이 질문을했습니다. JS는 여러 배열의 중복 데이터를 찾습니다.
메모:
1. 여러 배열에 두 개 이상의 중복 데이터가있는 한이 데이터가 필요한 것입니다.
2. 단일 배열의 데이터에 중복 값이 없습니다 (물론, 하나가 있으면 제거 할 수 있습니다).
3. 시간이 많이 걸리는 문제, 이것은 매우 중요합니다
소스 코드 :
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> 여러 배열에서 중복 데이터 가져 오기 </title> </head> <body> <script type = "text/javaScript"> // 시간 기능 usetime (date1, date2) {dattime (date time 시간 차이의 밀리 초 // 차이의 일수를 계산합니다. var 일 = math.floor (date3/(24*3600*1000)) // 시간 수 var leave1 = date3%(24*3600*1000) // 남은 시간 var var var var var.floor (Leave1/(3600*1000)) // 분 = math.floor (Leave2/(60*1000)) // 시간 횟수 후 나머지 밀리 초. var var var var var var var var var var var var var var var var var var var var var var var var var seconds = math.round (Leave3/1000)는 "+days+" "+시간+": "+mongs+": "+초+"+"+"+"+"+"+"+"+"+"+"+"+"+"+" "+Leave3%1000; //+" '';; } // 최소와 최대 사이의 숫자로 구성된 데이터를 반환하고 길이는 max-min+1입니다 (데이터는 고정되었지만 순서는 무작위) 함수 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의 특정 하나는 마지막 하나의 tmp = arr [randindex]와 var를 교환합니다. arr [randindex] = arr [len]; ARR [LEN] = TMP; }} 반환 ARR; } // Min과 Max 사이의 숫자로 구성된 데이터를 반환하면, 그 수는 num (random data) 함수 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-; 부서지다; }} if (! inarr) {arr.push (randomnumber); }} 반환 ARR; } // 중복 데이터 함수 가져 오기 getDumplication () {var num = arguments.length; if (num <2) {return [];}; var obj = {ret : [], // 동일한 데이터 컨테이너를 저장하십시오. [] // 다른 데이터를 스토리지} (var i = 0; i <3; i ++) {// console.log (인수 [i]); var arr = 인수 [i]; obj = 거래 (arr, obj); } return obj; } // 단일 배열을 처리하고 컨테이너의 데이터와 비교 한 후 중복 데이터를 얻습니다 (문제 : 너무 큰 데이터 볼륨이 컨테이너에서 너무 많은 데이터를 유발합니다) 함수 거래 (arr, obj) {var len = obj.container.length; if (len == 0) {obj.container = arr; } else {var arrlen = arr.length; for (var j = 0; 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]); // 컨테이너로의 반복 없음}}} reture obj; } //이 데이터가 배열 함수 inarr (obj, arr)에 이미 존재하는지 여부를 감지합니다. var len = arr.length; for (var i = 0; i <len; i ++) {if (arr [i] == obj) {evention = true; }} 반환이 존재합니다. } // ----------------------------------------------------------------------------- 새로운 날짜 (); var arr_a = getarr (1,20); var arr_b = getarr (18,35); var arr_c = getarr (34,50); var dempdata = getDumplication (arr_a, arr_b, arr_c); Console.log (Dembdata.ret); //console.log(dumpdata.container); console.log (usetime (날짜, 새 날짜 ()); console.log("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- usetime (date1, new date ()); 결과:
우리는 더 많은 데이터를 테스트합니다 : 3 개의 배열이 무작위로 생성되고 총 3W의 데이터가 생성됩니다.
결과:
5W 데이터의 5 배 배열 : (데이터 배포 : 1W/배열)
5 개의 10W 데이터 배열 : (데이터 배포 : 5W, 4W, 3W, 2W, 1W)
10 배열 10W 데이터 : (데이터 배포 : 1W/배열)
100 배열 100W 데이터 : (데이터 배포 : 1W/배열)
결론적으로 :
1. 소비 된 시간은 알고리즘에 따라 다릅니다.
2. 총 데이터가 변경되지 않은 경우 : 가능한 한 많은 배열을 사용해보십시오. 단일 배열에 너무 많은 데이터가 없어야합니다. 물론 일반화 할 수 없습니다.
3.이 테스트에서는 1W 데이터의 단일 배열이 정상이며, 5W 데이터는 죽지 않았으며 10W 데이터는 hua tuo에 문의하십시오.
질문:
1. 알고리즘은 일시적으로 작성되었으며 (실제로 알고리즘이 없습니다^_^) 개선해야합니다.
2. 배열 컨테이너는 테스트 코드에서 사용되지 않은 데이터를 저장하는 데 사용됩니다.
문제는 다음과 같습니다. 너무 많은 데이터는 컨테이너에 너무 많은 데이터가 발생합니다.
3. 테스트 데이터는 무작위로 생성되며 숫자 만 생성됩니다. 다른 객체 인 경우 별도로 테스트하십시오 (주로 테스트 데이터를 생성하기가 어렵 기 때문에…).
4. 다차원 배열 테스트되지 않음 (테스트 성능이 좋지 않을 수 있음 0_0)
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.