Aujourd'hui, mon ami m'a posé cette question: JS trouve des données en double de plusieurs tableaux
Note:
1. Pour être plus précis, tant qu'il y a plus de deux données en double dans plusieurs tableaux, alors ces données sont ce dont j'ai besoin
2. Il n'y a pas de valeur en double dans les données dans un seul tableau (bien sûr, vous pouvez le dédupliquer s'il y en a un)
3. Problème long, c'est très important
Code source:
<! Doctype html> <html lang = "en"> <éad> <meta charset = "utf-8"> <itle> Obtenez des données en double dans plusieurs tableaux </tapit millisecondes de la différence de temps // Calculez le nombre de jours de la différence var jours = math.floor (date3 / (24 * 3600 * 1000)) // Calculez le nombre d'heures var congé1 = date3% (24 * 3600 * 1000) // les millisecondes restantes après le nombre de jours var heures = Math.floor (congés 1 / (3600 * 1000) // Minutes = math.floor (Leave2 / (60 * 1000)) // les millisecondes restantes après le nombre d'heures var minutes var feuilles3 = Leave2% (60 * 1000) // les millisecondes restantes après le nombre de minutes var secondes = Math.round (Leave3 / 1000) Retour "Time:" + Days + "" + ":" + Minutes + ":" + Seconds + ":" + secondes + " "+ Leave3% 1000; // +" '' "; } // renvoie les données composées du nombre entre min et max, la longueur est max-min + 1 (les données sont fixes, mais l'ordre est aléatoire) getArr (min, max) {var arr = []; var numtopush = min; pour (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 ++); // Un certain dans ARR échange VAR avec le dernier TMP = arr [Randindex]; arr [randindex] = arr [len]; arr [len] = tmp; }} return arr; } // Renvoie les données composées du nombre entre min et max, le nombre d'entre eux est NUM (Données aléatoires) Randomarr (min, max, num) {var arr = []; pour (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--; casser; }} if (! inarr) {arr.push (randomNumber); }} return arr; } // Get Duplicate Data Fonction getDumpLate () {var num = arguments.length; if (num <2) {return [];}; var obj = {ret: [], // Stockage Le même conteneur de données: [] // Storage de données différentes} pour (var i = 0; i <3; i ++) {// console.log (arguments [i]); var arr = arguments [i]; obj = deal (arr, obj); } return obj; } // Traitez un tableau unique, comparez-les avec les données dans le conteneur et obtenez des données en double (problème: trop grand volume de données provoquera trop de données dans le conteneur) de la fonction (arr, obj) {var len = obj.continer.length; if (Len == 0) {obj.Container = arr; } else {var arrlen = arr.length; pour (var j = 0; j <arrlen; j ++) {// transf le tableau, chaque élément est comparé au conteneur var conlen = obj.connainer.length; var intocontainer = false; pour (var i = 0; i <conlen; i ++) {var convalue = obj.connainer [i]; if (arr [j] == Convalue) {// répéter ret obj.ret.push (arr [j]); intocontainer = true; }} if (intocontainer &&! inarr (arr [j], obj.connainer)) {obj.container.push (arr [j]); // pas de répétition dans le conteneur}}} return obj; } // Détection si ces données existent déjà dans la fonction du tableau inarr (obj, arr) {var existe = false; var len = arr.length; for (var i = 0; i <len; i ++) {if (arr [i] == obj) {exist = true; }} return 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 = getDumpLate (arr_a, arr_b, arr_c); Console.log (DumpData.ret); //console.log(dumpData.connainer); Console.log (UseTime (date, nouveau Date ())); console.log("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- USETime (Date1, New Date ()); résultat:
Nous testons plus de données: 3 tableaux sont générés au hasard, un total de 3W de données
résultat:
5 tableaux de données 5W: (distribution des données: 1W / tableau)
5 tableaux de données 10W: (Distribution des données: 5W, 4W, 3W, 2W, 1W)
10 tableaux 10W Données: (distribution des données: 1W / tableau)
100 tableaux 100W Data: (Distribution des données: 1W / tableau)
en conclusion:
1. Combien de temps passé dépend de votre algorithme
2. Lorsque les données totales restent inchangées: essayez d'avoir autant de tableaux que possible, et il ne devrait pas y avoir trop de données dans un seul tableau. Bien sûr, il ne peut pas être généralisé.
3. Dans ce test, un seul tableau de données de 1W est OK, les données 5W ne sont pas mortes et les données 10W sont veuillez contacter Hua Tuo
question:
1. L'algorithme est écrit temporairement (en fait, il n'y a pas d'algorithme ^ _ ^) et doit être amélioré
2. Un conteneur de tableau est utilisé dans le code de test pour stocker des données non dégonflées.
Ensuite, le problème est: trop de données provoqueront trop de données dans le conteneur, puis ... vous savez.
3. Les données de test sont générées au hasard et uniquement des nombres. S'il s'agit d'un autre objet, veuillez le tester séparément (principalement parce que les données de test sont difficiles à générer (⊙o⊙)…)
4. tableau multidimensionnel non testé (les performances du test peuvent ne pas être bonnes 0_0)
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.