Hari ini teman saya menanyakan pertanyaan ini kepada saya: JS menemukan data duplikat dari beberapa array
Catatan:
1. Lebih tepatnya, selama ada lebih dari dua data duplikat dalam beberapa array, maka data ini adalah yang saya butuhkan
2. Tidak ada nilai duplikat dalam data dalam satu array (tentu saja, Anda dapat mendeduplikasi jika ada)
3. Masalah yang memakan waktu, ini sangat penting
Kode Sumber:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Get duplicate data in multiple arrays</title></head><body> <script type="text/javascript"> //calculate time function useTime(date1,date2){ var date3=date2.getTime()-date1.getTime() //The number of milidetik dari perbedaan waktu // Hitung jumlah hari dari perbedaan hari var = Math.floor (Tanggal3/(24*3600*1000)) // Hitung jumlah jam var cuti1 = Tanggal3%(24*3600*1000) // Milliseconds yang tersisa) setelah jumlah hari ini (MIMAGE/3000/MILLIS (LIVING (340 tahun. Minutes = Math.floor (cuti2/(60*1000)) // sisa milidetik setelah jumlah jam var menit var meninggalkan3 = cuti2%(60*1000) // sisa milidetik setelah jumlah menit var detik = matematika. "+cuti3%1000; //+" '' "; } // Kembalikan data yang terdiri dari angka antara min dan maks, panjangnya maks-min+1 (data sudah diperbaiki, tetapi urutannya acak) getarr (min, max) {var arr = []; var numtopush = min; untuk (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 ++); // yang tertentu dalam pertukaran ARR var dengan yang terakhir tmp = arr [randindex]; arr [randindex] = arr [len]; arr [len] = tmp; }} return arr; } // Kembalikan data yang terdiri dari angka antara min dan max, jumlahnya adalah fungsi num (data acak) acak (min, max, num) {var arr = []; untuk (var i = 0; i <num; i ++) {var randomNumber = math.floor (math.random ()*(max-min)+min); var inarr = false; untuk (var i = 0; i <arr.length; i ++) {if (arr [i] == randomNumber) {inarr = true; num--; merusak; }} if (! inarr) {arr.push (randomNumber); }} return arr; } // Dapatkan fungsi data duplikat getDumplicate () {var num = arguments.length; if (num <2) {return [];}; var obj = {ret: [], // penyimpanan wadah data yang sama: [] // penyimpanan data yang berbeda} untuk (var i = 0; i <3; i ++) {// console.log (argumen [i]); var arr = argumen [i]; obj = kesepakatan (arr, obj); } kembalikan obj; } // Memproses array tunggal, bandingkan dengan data dalam wadah, dan dapatkan data duplikat (masalah: volume data yang terlalu besar akan menyebabkan terlalu banyak data dalam wadah) Kesepakatan fungsi (ARR, OBJ) {var len = obj.container.length; if (len == 0) {obj.container = arr; } else {var arrlen = arr.length; untuk (var j = 0; j <arrlen; j ++) {// mentransfer array, setiap elemen dibandingkan dengan wadah var conlen = obj.container.length; var intocontainer = false; untuk (var i = 0; i <conlen; i ++) {var convalue = obj.container [i]; if (arr [j] == convalue) {// ulangi ret obj.ret.push (arr [j]); intocontainer = true; }} if (intocontainer &&! inarr (arr [j], obj.container)) {obj.container.push (arr [j]); // tidak ada pengulangan ke dalam wadah}}} return obj; } // Deteksi Apakah data ini sudah ada dalam fungsi array inarr (obj, arr) {var ada = false; var len = arr.length; untuk (var i = 0; i <len; i ++) {if (arr [i] == obj) {ada = true; }} return ada; } // ------------------------- 测试 -------------------------------------------- Tanggal Var = Tanggal Baru (); 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 (tanggal, tanggal baru ())); Console.log ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Usetime (Date1, New Date ()); hasil:
Kami menguji lebih banyak data: 3 array dihasilkan secara acak, total 3W potongan data
hasil:
5 Array Data 5W: (Distribusi Data: 1W/Array)
5 Array Data 10W: (Distribusi Data: 5W, 4W, 3W, 2W, 1W)
10 Array 10W Data: (Distribusi Data: 1W/Array)
100 Array 100W Data: (Distribusi Data: 1W/Array)
Kesimpulan:
1. Berapa banyak waktu yang dihabiskan tergantung pada algoritma Anda
2. Ketika total data tetap tidak berubah: cobalah untuk memiliki sebanyak mungkin array, dan tidak ada terlalu banyak data dalam satu array. Tentu saja, itu tidak dapat digeneralisasi.
3. Dalam tes ini, array tunggal data 1W baik -baik saja, data 5W tidak mati, dan data 10W adalah hubungi hua tuo
pertanyaan:
1. Algoritma ditulis untuk sementara (pada kenyataannya, tidak ada algoritma^_^), dan perlu ditingkatkan
2. Wadah array digunakan dalam kode uji untuk menyimpan data non-duplikat.
Maka masalahnya adalah: terlalu banyak data akan menyebabkan terlalu banyak data dalam wadah, dan kemudian ... Anda tahu.
3. Data uji dihasilkan secara acak dan hanya angka. Jika itu adalah objek lain, harap uji secara terpisah (terutama karena data uji sulit untuk dihasilkan (⊙o⊙) ...)
4. Array Multidimensi Tidak Diuji (Kinerja Tes Mungkin Tidak Baik 0_0)
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.