Сегодня мой друг задал мне этот вопрос: JS находит дубликаты данных нескольких массивов
Примечание:
1. Чтобы быть более точным, если в нескольких массивах существует более двух дубликатов данных, то эти данные - это то, что мне нужно
2. В данных нет дубликата в одном массиве (конечно, вы можете дедуплизировать его, если он есть)
3. Занимая много времени, это очень важно
исходный код:
<! Doctype html> <html lang = "en"> <head> <meta charset = "UTF-8"> <Title> Получить дубликаты данных в нескольких массивах </title> </head> <body> <script type = "text/javascript"> // функция времени (date1, date2) {var date3 = date2.gettime ()-datemtime ()-datemtime ()-datemtime- миллисекунд разницы во времени // Рассчитайте количество дней разницы в дни var = math.floor (date3/(24*3600*1000)) // Рассчитайте количество часов var reake1 = date3%(24*3600*1000) // Остальные миллисекунды после количества дней var = math. 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+" "+оставить 3%1000; //+" '' "; } // Возвращение данных, состоящих из числа между минем и максимум, длина-максимум+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]; arr [randindex] = arr [len]; arr [len] = tmp; }} return arr; } // Возвращение данных, состоящих из числа между минем и максимум, число из них - функция num (случайные данные) 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); }} return arr; } // Получить дубликат функции данных getDumplicate () {var num = arguments.length; if (num <2) {return [];}; var obj = {ret: [], // хранилище один и тот же контейнер данных: [] // хранилище var arr = аргументы [i]; obj = deal (arr, obj); } вернуть obj; } // Обработайте один массив, сравните его с данными в контейнере и получите дубликаты данных (задача: слишком большой объем данных приведет к тому, что в контейнере есть слишком много данных в контейнере). if (len == 0) {obj.container = arr; } else {var arrlen = arr.length; for (var j = 0; j <arrlen; j ++) {// transf массив, каждый элемент сравнивается с контейнером var conlen = obj.container.length; var intocontainer = false; for (var i = 0; i <conlen; i ++) {var convalue = obj.container [i]; if (arr [j] == CERVALUE) {// повторить ret obj.ret.push (arr [j]); Intocontainer = true; }} if (intocontainer &&! inarr (arr [j], obj.container)) {obj.container.push (arr [j]); // нет повторения в контейнер}}} вернуть obj; } // Обнаружение, существует ли эти данные в функции массива inarr (obj, arr) {var существует = false; var len = arr.length; for (var i = 0; i <len; i ++) {if (arr [i] == obj) {evest = true; }} return существует; } // ------------------------- 测试 ------------------------------------------------ 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 (dimpladata.ret); //console.log(dumpdata.container); console.log (usetime (дата, новая дата ())); Console.log ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. usetime (date1, new Date ()); результат:
Мы проверяем больше данных: сгенерированы 3 массива, в общей сложности 3 Вт фрагментов данных
результат:
5 массивов 5W данных: (Распределение данных: 1 Вт/массив)
5 массивов 10 Вт данных: (Распределение данных: 5 Вт, 4 Вт, 3 Вт, 2 Вт, 1 Вт)
10 массивов 10W Данные: (Распределение данных: 1 Вт/массив)
100 массивов 100 Вт Данные: (Распределение данных: 1 Вт/массив)
в заключение:
1. Сколько времени тратится, зависит от вашего алгоритма
2. Когда общее количество данных остается неизменным: постарайтесь иметь как можно больше массивов, и не должно быть слишком много данных в одном массиве. Конечно, это не может быть обобщено.
3. В этом тесте один массив данных 1W в порядке, данные 5W не мертвы, а данные 10 Вт - это свяжитесь с Hua Tuo
вопрос:
1. Алгоритм временно написан (на самом деле, алгоритм^_^) нет, и должен быть улучшен
2. В тестовом коде используется контейнер для массива для хранения не дубликатов данных.
Тогда проблема в том, что слишком много данных вызовет слишком много данных в контейнере, а затем ... вы знаете.
3. Тестовые данные генерируются случайным образом и только числа. Если это другой объект, пожалуйста, проверьте его отдельно (в основном потому, что тестовые данные трудно генерировать (⊙O⊙)…)
4. Многомерный массив не тестируется (производительность теста может быть не хорошей 0_0)
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.