Hoje meu amigo me fez esta pergunta: JS encontra dados duplicados de várias matrizes
Observação:
1. Para ser mais preciso, desde que haja mais de dois dados duplicados em várias matrizes, esses dados são o que eu preciso
2. Não há valor duplicado nos dados em uma única matriz (é claro, você pode deduzir -o se houver um)
3. Problema demorado, isso é muito importante
código -fonte:
<! Doctype html> <html lang = "pt"> <head> <meta charset = "utf-8"> <title> Obtenha dados duplicos em múltiplas matrizes </title> </ad Head> <body> <script type = "text/javascript"> // calcule a função usetime (date1, date1/2) milissegundos da diferença horária // calcula o número de dias da diferença var dias = math.floor (date3/(24*3600*1000)) // calcule o número de horas var deixa1 = date3%(24*3600*1000) // os milissegundos restantes*o número de dias/3600*1000) // 360) minutos = math.floor (Leave2/(60*1000)) // Os milissegundos restantes após o número de horas var minutos var folhetos3 = Leave2%(60*1000) // os milissegundos restantes após o número de minutos: "Math.Onds+Math.Round (Leave3/1000) Retorno" "+" "" "+horas" "+:"+: "Math.Round (Leave3/1000)", "+" ""+horas ""+"+:"+: "Math.Round (Leave3/1000)", "+" ""+horas ""+: "+:"+: "Math. "+Leave3%1000; //+" '' "; } // Retorna os dados compostos do número entre min e max, o comprimento é max-min+1 (os dados são corrigidos, mas a ordem é aleatória) função 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 ++); // um certo em trocas de ARR var com o último tmp = arr [randindex]; arr [randindex] = arr [len]; arr [len] = tmp; }} retornar arr; } // retorna os dados compostos do número entre Min e Max, o número deles é NUM (Dados aleatórios) Randomarr (min, max, num) {var arr = []; for (var i = 0; i <num; i ++) {var aleatóriaNumber = 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--; quebrar; }} if (! inarr) {arr.push (RandomNumber); }} retornar arr; } // Obtenha função de dados duplicados getDumplicate () {var num = argumentos.length; if (num <2) {return [];}; var obj = {ret: [], // armazenamento o mesmo contêiner de dados: [] // armazenamento diferentes dados} para (var i = 0; i <3; i ++) {// console.log (argumentos [i]); var arr = argumentos [i]; obj = negócio (arr, obj); } retornar obj; } // Processam uma única matriz, compare -a com os dados no contêiner e obtenha dados duplicados (Problema: muito grande volume de dados causará muitos dados no contrato de função do contêiner) (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 ++) {// transf a matriz, cada elemento é comparado com o contêiner var connen = obj.container.length; var intocontainer = false; for (var i = 0; i <connen; 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]); // sem repetição no contêiner}}} retornar obj; } // Detecção se esses dados já existem na função da matriz inarr (obj, arr) {var exist = false; var len = arr.length; for (var i = 0; i <len; i ++) {if (arr [i] == obj) {exist = true; }} Retorno existe; } // --------------------------- 测试 -------------------------------------------- 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 (data, new Date ())); console.log ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Usetime (Date1, New Date ()); resultado:
Testamos mais dados: 3 matrizes são geradas aleatoriamente, um total de dados de 3W
resultado:
5 Matrizes de dados 5W: (Data Distribuição: 1W/Array)
5 Matrizes de Dados de 10w: (Distribuição de dados: 5W, 4W, 3W, 2W, 1W)
10 Matrizes 10W Dados: (Data Distribuição: 1W/Array)
100 matrizes 100w Dados: (Data Distribuição: 1W/Array)
para concluir:
1. Quanto tempo é gasto depende do seu algoritmo
2. Quando o total de dados permanecer inalterado: tente ter o maior número possível de matrizes e não deve haver muitos dados em uma única matriz. Claro, não pode ser generalizado.
3. Neste teste, uma única matriz de dados 1W está ok, os dados 5W não estão mortos e os dados de 10w são entre em contato com Hua Tuo
pergunta:
1. O algoritmo é escrito temporariamente (de fato, não há algoritmo^_^) e precisa ser melhorado
2. Um contêiner de matriz é usado no código de teste para armazenar dados não duplicados.
Então, o problema é: muitos dados causarão muitos dados no contêiner e então ... você sabe.
3. Os dados do teste são gerados aleatoriamente e apenas números. Se for outro objeto, teste -o separadamente (principalmente porque os dados do teste são difíceis de gerar (⊙o⊙)…)
4. Matriz multidimensional não testada (o desempenho do teste pode não ser bom 0_0)
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.