วันนี้เพื่อนของฉันถามฉันคำถามนี้: JS ค้นหาข้อมูลที่ซ้ำกันของหลายอาร์เรย์
บันทึก:
1. เพื่อความแม่นยำมากขึ้นตราบใดที่มีข้อมูลซ้ำมากกว่าสองข้อมูลในหลายอาร์เรย์ข้อมูลนี้เป็นสิ่งที่ฉันต้องการ
2. ไม่มีค่าที่ซ้ำกันในข้อมูลในอาร์เรย์เดียว (แน่นอนคุณสามารถหักล้างได้หากมีหนึ่ง)
3. ปัญหาใช้เวลานานสิ่งนี้สำคัญมาก
ซอร์สโค้ด:
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> รับข้อมูลที่ซ้ำกันในหลายอาร์เรย์ </title> </head> <body> <script type = "วันที่ (date3 มิลลิวินาทีของความแตกต่างของเวลา // คำนวณจำนวนวันของความแตกต่าง var days = math.floor (วันที่ 3/(24*3600*1000)) // คำนวณจำนวนชั่วโมง var leade 1 = วันที่ 3%(24*3600*1000) // milliseconds ที่เหลือ นาที = math.floor (leave2/(60*1000)) // มิลลิวินาทีที่เหลือหลังจากจำนวนชั่วโมง var นาที var ออกไป 3 = leave2%(60*1000) // มิลลิวินาทีที่เหลือหลังจากจำนวนนาที var วินาที = math.round "+leave3%1000; //+" '' '; } // ส่งคืนข้อมูลที่ประกอบด้วยหมายเลขระหว่างขั้นต่ำและสูงสุดความยาวคือ max-min+1 (ข้อมูลได้รับการแก้ไข แต่คำสั่งซื้อเป็นแบบสุ่ม) getarr (min, max) {var arr = []; var numtopush = min; สำหรับ (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 แลกเปลี่ยน var กับหนึ่ง tmp = arr [randindex]; arr [randindex] = arr [len]; arr [len] = tmp; }} return arr; } // ส่งคืนข้อมูลที่ประกอบด้วยหมายเลขระหว่างขั้นต่ำและสูงสุดจำนวนของพวกเขาคือฟังก์ชัน NUM (ข้อมูลสุ่ม) แบบสุ่ม (ขั้นต่ำ, สูงสุด, num) {var arr = []; สำหรับ (var i = 0; i <num; i ++) {var randomNumber = math.floor (math.random ()*(max-min)+นาที); var inarr = false; สำหรับ (var i = 0; i <arr.length; i ++) {ถ้า (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 i = 0; i <3; i ++) {// console.log (อาร์กิวเมนต์ [i]); var arr = อาร์กิวเมนต์ [i]; obj = ข้อตกลง (arr, obj); } return obj; } // ประมวลผลอาร์เรย์เดียวเปรียบเทียบกับข้อมูลในคอนเทนเนอร์และรับข้อมูลที่ซ้ำกัน (ปัญหา: ปริมาณข้อมูลที่มีขนาดใหญ่เกินไปจะทำให้เกิดข้อมูลมากเกินไปในคอนเทนเนอร์) ฟังก์ชั่น (arr, obj) {var len = obj.container.length; if (len == 0) {obj.container = arr; } else {var arrlen = arr.length; สำหรับ (var j = 0; j <arrlen; j ++) {// transf อาร์เรย์แต่ละองค์ประกอบจะถูกเปรียบเทียบกับคอนเทนเนอร์ var conlen = obj.container.length; var intocontainer = false; สำหรับ (var i = 0; i <conlen; i ++) {var convalue = obj.container [i]; if (arr [j] == พักฟื้น) {// ซ้ำ ret obj.ret.push (arr [j]); Intocontainer = true; }} ถ้า (intocontainer &&! inarr (arr [j], obj.container)) {obj.container.push (arr [j]); // ไม่มีการทำซ้ำในคอนเทนเนอร์}}} return obj; } // การตรวจจับว่าข้อมูลนี้มีอยู่แล้วในฟังก์ชั่นอาร์เรย์ Inarr (obj, arr) {var มีอยู่ = false; var len = arr.length; สำหรับ (var i = 0; i <len; i ++) {ถ้า (arr [i] == obj) {มีอยู่ = true; }} return มีอยู่; } // ------------------------------------------------------------------------ วันที่ = วันที่ใหม่ (); var arr_a = getarr (1,20); var arr_b = getarr (18,35); var arr_c = getarr (34,50); var dumpdata = getDumplicle (arr_a, arr_b, arr_c); console.log (dumpdata.ret); //console.log(dumpdata.container); console.log (usetime (วันที่, วันที่ใหม่ ())); console.log ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - USETIME (วันที่ 1, วันที่ใหม่ ()); ผลลัพธ์:
เราทดสอบข้อมูลเพิ่มเติม: 3 อาร์เรย์ถูกสร้างขึ้นแบบสุ่มรวม 3W ชิ้นส่วนข้อมูล
ผลลัพธ์:
5 อาร์เรย์ของข้อมูล 5W: (การกระจายข้อมูล: 1W/Array)
5 อาร์เรย์ของข้อมูล 10W: (การกระจายข้อมูล: 5W, 4W, 3W, 2W, 1W)
10 อาร์เรย์ 10W ข้อมูล: (การกระจายข้อมูล: 1W/Array)
100 อาร์เรย์ข้อมูล 100W: (การกระจายข้อมูล: 1W/Array)
สรุปแล้ว:
1. ใช้เวลาเท่าใดขึ้นอยู่กับอัลกอริทึมของคุณ
2. เมื่อข้อมูลทั้งหมดยังคงไม่เปลี่ยนแปลง: พยายามที่จะมีอาร์เรย์ให้มากที่สุดเท่าที่จะเป็นไปได้และไม่ควรมีข้อมูลมากเกินไปในอาร์เรย์เดียว แน่นอนว่ามันไม่สามารถสรุปได้
3. ในการทดสอบนี้ข้อมูล 1w อาร์เรย์เดียวคือโอเคข้อมูล 5W ยังไม่ตายและข้อมูล 10W คือโปรดติดต่อ Hua Tuo
คำถาม:
1. อัลกอริทึมถูกเขียนชั่วคราว (อันที่จริงไม่มีอัลกอริทึม^_^) และจำเป็นต้องปรับปรุง
2. คอนเทนเนอร์อาร์เรย์ถูกใช้ในรหัสทดสอบเพื่อจัดเก็บข้อมูลที่ไม่ได้ทำซ้ำ
จากนั้นปัญหาคือ: ข้อมูลมากเกินไปจะทำให้เกิดข้อมูลมากเกินไปในคอนเทนเนอร์และจากนั้น ... คุณก็รู้
3. ข้อมูลการทดสอบถูกสร้างขึ้นแบบสุ่มและตัวเลขเท่านั้น หากเป็นวัตถุอื่นโปรดทดสอบแยกกัน (ส่วนใหญ่เป็นเพราะข้อมูลการทดสอบนั้นยากที่จะสร้าง (⊙o⊙) …)
4. อาร์เรย์หลายมิติไม่ได้ทดสอบ (ประสิทธิภาพการทดสอบอาจไม่ดี 0_0)
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น