Heute hat mir mein Freund die Frage gestellt: JS findet doppelte Daten mehrerer Arrays
Notiz:
1. Um genauer zu sein, sofern in mehreren Arrays mehr als zwei doppelte Daten vorhanden sind, dann brauche ich diese Daten
2. Es gibt keinen doppelten Wert in den Daten in einem einzelnen Array (natürlich können Sie ihn deduplizieren, wenn es eines gibt).
3. zeitaufwändiges Problem ist sehr wichtig, dass dies sehr wichtig ist
Quellcode:
<! DocType html> <html Lang = "en"> <kopf> <meta charset = "utf-8"> <title> GET DUPLIKATIONEN DATEN IN ZUSBERIGEN ARRAYS </title> </head> <body> <script type = "text/javaScript"> // Zeitfunktion usetime (Date2). Millisekunden der Zeitdifferenz // Berechnen Sie die Anzahl der Tage der Differenz var tage = math.floor (Datum 3/(24*3600*1000)) // Berechnen Sie die Anzahl der Stunden var beurlaub1 = Datum 3%(24*3600*1000) // die restlichen Millisekunden nach der Anzahl der Tage. minutes=Math.floor(leave2/(60*1000)) //The remaining milliseconds after the number of hours var minutes var leaves3=leave2%(60*1000) //The remaining milliseconds after the number of minutes var seconds=Math.round(leave3/1000) return "Time:"+days+" "+hours+":"+minutes+":"+seconds+":"+seconds+" "+Leave3%1000; //+" '' "; } // Die Daten, die aus der Zahl zwischen min und max bestehen, sind die Länge max-min+1 (die Daten sind festgelegt, die Reihenfolge ist jedoch zufällig) Getarr (min, max) {var arr = []; var numtopush = min; für (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 ++); // ein bestimmtes in arr Austausch var mit dem letzten TMP = arr [RandIndex]; arr [randindex] = arr [len]; arr [len] = tmp; }} return arr; } // Gibt die Daten zurück, die aus der Anzahl zwischen min und max bestehen, die Anzahl der Num (Zufallsdaten) -Funktion Randomarr (min, max, num) {var arr = []; für (var i = 0; i <num; i ++) {var randomNumber = math.floor (math.random ()*(max-min)+min); var inarr = false; für (var i = 0; i <arr.length; i ++) {if (arr [i] == randomNumber) {inarr = true; num--; brechen; }} if (! inarr) {arr.push (randomNumber); }} return arr; } // doppelte Datenfunktion getDumPlicate () {var num = argumente.length; if (num <2) {return [];}; var obj = {ret: [], // Speichern Sie denselben Datencontainer: [] // Verschiedene Daten} für (var i = 0; i <3; i ++) {// console.log (Argumente [i]); var arr = Argumente [i]; obj = Deal (arr, obj); } return obj; } // Verarbeiten Sie ein einzelnes Array, vergleichen Sie es mit den Daten im Container und erhalten Sie doppelte Daten (Problem: Zu großes Datenvolumen verursacht zu viele Daten im Container) Funktion (arr, obj) {var len = obj.container.Length; if (len == 0) {obj.container = arr; } else {var arrlen = arr.length; für (var j = 0; j <arrlen; j ++) {// transf Das Array wird jedes Element mit dem Container var conlen = obj.container.length verglichen; var intocontainer = false; für (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]); // Keine Wiederholung in den Container}}} return obj; } // Erkennen Sie, ob diese Daten bereits in der Array -Funktion inarr (obj, arr) {var exist = false; var len = arr.length; für (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 (Datum, neues Datum ())); console.log ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ USETime (Datum1, neues Datum ()); Ergebnis:
Wir testen weitere Daten: 3 Arrays werden zufällig generiert, insgesamt 3W -Datenstücke
Ergebnis:
5 Arrays mit 5W -Daten: (Datenverteilung: 1W/Array)
5 Arrays mit 10W -Daten: (Datenverteilung: 5W, 4W, 3W, 2W, 1W)
10 Arrays 10W Daten: (Datenverteilung: 1W/Array)
100 Arrays 100W Daten: (Datenverteilung: 1W/Array)
abschließend:
1. Wie viel Zeit verbracht wird, hängt von Ihrem Algorithmus ab
2. Wenn die Gesamtdaten unverändert bleiben: Versuchen Sie, so viele Arrays wie möglich zu haben, und in einem einzelnen Array sollten nicht zu viele Daten vorhanden sein. Natürlich kann es nicht verallgemeinert werden.
3. In diesem Test ist ein einzelnes Array von 1W -Daten in Ordnung, 5W -Daten sind nicht tot und 10W -Daten sind bitte wenden Sie sich an Hua Tuo
Frage:
1. Der Algorithmus ist vorübergehend geschrieben (in der Tat gibt es keinen Algorithmus^_^) und muss verbessert werden
2. In dem Testcode wird ein Array-Container verwendet, um nicht duplikare Daten zu speichern.
Dann ist das Problem: Zu viele Daten verursachen zu viele Daten im Container, und dann ... Sie wissen es.
3. Die Testdaten werden zufällig und nur Zahlen generiert. Wenn es sich um ein anderes Objekt handelt, testen Sie es bitte separat (vor allem, weil die Testdaten schwer zu generieren sind (⊙O⊙)…)…)
4. Mehrdimensionales Array nicht getestet (die Testleistung ist möglicherweise nicht gut 0_0)
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.