Hoy mi amigo me hizo esta pregunta: JS encuentra datos duplicados de múltiples matrices
Nota:
1. Para ser más precisos, siempre que haya más de dos datos duplicados en múltiples matrices, entonces estos datos son lo que necesito
2. No hay valor duplicado en los datos en una sola matriz (por supuesto, puede deduplicarlo si hay uno)
3. Problema que requiere mucho tiempo, esto es muy importante
Código fuente:
<! DocType html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> Obtener datos duplicados en múltiples matrices </title> </head> <body> <script type = "text/javaScript"> // calcule la función de tiempo useTime (fecha1, fecha2) {var fecha3 = date2.getTime ()--date1.gEttime () milisegundos de la diferencia de tiempo // Calcule el número de días de la diferencia var days = Math.floor (date3/(24*3600*1000)) // Calcule el número de horas var de permiso1 = date3%(24*3600*1000) // El número de MilliseConds de remanencia después del número de días var soures = Math.floor (Leave1/(3600*1000) // el reemedio de MilliseConds Actas = Math.floor (Leave2/(60*1000)) // Los milisegundos restantes después de la cantidad de horas var Minutes var Loess3 = Leave2%(60*1000) // Los milisegundos restantes después del número de minutos var segundos = Math.Round (Leave3/1000) return "Tiempo:"+Días+"+Horas+": "+minutos+": "Segundos+"+"+"+"Tiempo:"+Días+"+Horas+": "+Minutos+": "Segundos+" "+Leave3%1000; //+" '' "; } // devuelve los datos compuestos del número entre min y max, la longitud es max-min+1 (los datos son fijos, pero el orden es aleatorio) 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 ++); // Cierto en ARR intercambia var con el último tmp = arr [randindex]; arr [randindex] = arr [len]; arr [len] = tmp; }} return arr; } // Devuelve los datos compuestos del número entre min y max, el número de ellos es la función num (datos aleatorios) 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--; romper; }} if (! inarr) {arr.push (randomNumber); }} return arr; } // Obtener función de datos duplicados getDumplicate () {var num = arguments.length; if (num <2) {return [];}; var obj = {ret: [], // almacenamiento del mismo contenedor de datos: [] // almacenamiento de datos diferentes} para (var i = 0; i <3; i ++) {// console.log (argumentos [i]); var arr = argumentos [i]; obj = Deal (arr, obj); } return obj; } // Procesar una sola matriz, compararlo con los datos en el contenedor y obtener datos duplicados (problema: el volumen de datos demasiado grande causará demasiados datos en el contenedor) Deal de función (arr, obj) {var len = obj.container.length; if (len == 0) {obj.container = arr; } else {var arrlen = arr.length; para (var j = 0; j <arrlen; j ++) {// transf la matriz, cada elemento se compara con el contenedor var conlen = obj.container.length; var intocontainer = false; for (var i = 0; i <conlen; i ++) {var convalue = obj.container [i]; if (arr [j] == Convalue) {// Repita Ret obj.ret.push (arr [j]); intocontainer = true; }} if (intoContainer &&! Inarr (arr [j], obj.container)) {obj.container.push (arr [j]); // no se repetición en el contenedor}}} return obj; } // Detección de si estos datos ya existe en la función de matriz inarr (obj, arr) {var exist = false; var len = arr.length; for (var i = 0; i <len; i ++) {if (arr [i] == obj) {exist = true; }} return existen; } // ------------------------- 测试 ------------------------------------------------ VAR fecha = nueva fecha (); 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 (fecha, nueva fecha ())); console.log ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------- Usetime (date1, nueva fecha ()); resultado:
Probamos más datos: 3 matrices se generan aleatoriamente, un total de 3W Pies de datos
resultado:
5 matrices de datos 5W: (Distribución de datos: 1W/matriz)
5 matrices de datos de 10W: (Distribución de datos: 5W, 4W, 3W, 2W, 1W)
10 matrices 10W Datos: (Distribución de datos: 1W/matriz)
100 matrices 100W Datos: (Distribución de datos: 1W/Array)
en conclusión:
1. Cuánto tiempo se dedica a su algoritmo
2. Cuando los datos totales permanecen sin cambios: intente tener tantas matrices como sea posible, y no debería haber demasiados datos en una sola matriz. Por supuesto, no se puede generalizar.
3. En esta prueba, una sola matriz de datos de 1W está bien, los datos de 5W no están muertos y 10W datos son comuníquese con HUA Tuo
pregunta:
1. El algoritmo se escribe temporalmente (de hecho, no hay algoritmo^_^), y necesita mejorarse
2. Se utiliza un contenedor de matriz en el código de prueba para almacenar datos no duplicados.
Entonces, el problema es: demasiados datos causarán demasiados datos en el contenedor, y luego ... ya sabes.
3. Los datos de prueba se generan aleatoriamente y solo números. Si es otro objeto, pruebelo por separado (principalmente porque los datos de la prueba son difíciles de generar (⊙o⊙) ...)
4. Matriz multidimensional no probada (el rendimiento de la prueba puede no ser bueno 0_0)
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.