มีประสิทธิภาพเท่านั้น! รหัสนี้อาจเร็วกว่ารหัส 10 เท่าที่นี่ * ใช้ได้กับเบราว์เซอร์ทั้งหมดและมีผลต่อหน่วยความจำต่ำสุด .... และอีกมากมาย
หากคุณไม่ต้องการนำอาเรย์เก่ามาใช้ซ้ำ btw ทำการดำเนินการอื่น ๆ ที่จำเป็นก่อนที่คุณจะแปลงมันให้มีลักษณะเฉพาะที่นี่อาจเป็นวิธีที่เร็วที่สุดในการทำเช่นนี้
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
จากนั้นคุณสามารถลองสิ่งนี้
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 1];
function toUnique(a, b, c) { //array,placeholder,placeholder
b = a.length;
while (c = --b)
while (c--) a[b] !== a[c] || a.splice(c, 1);
return a // not needed ;)
}
console.log(toUnique(array));
//[3, 4, 5, 6, 7, 8, 9, 0, 2, 1]
ฉันมากับฟังก์ชั่นนี้อ่านบทความนี้ ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
ฉันไม่ชอบ for for loop มันมีพารามิเตอร์หลายตัวฉันชอบห่วง - ในขณะที่การวนซ้ำเร็วที่สุดในเบราว์เซอร์ทั้งหมดยกเว้นที่เราชอบ ... โครมมาก
ต่อไปฉันเขียนฟังก์ชั่นแรกที่ใช้ในขณะที่และมันเร็วกว่าฟังก์ชั่นที่พบในบทความ แต่ไม่เพียงพอunique2()
ขั้นตอนต่อไปใช้ js ที่ทันสมัย Object.keys
ฉันแทนที่อันอื่นสำหรับลูปด้วย Object.keys ของ js1.7 ... เร็วขึ้นและสั้นลงเล็กน้อย (เร็วกว่าโครเมี่ยม 2x);) ไม่พอ!. unique3()
.
ณ จุดนี้ฉันคิดว่าสิ่งที่ฉันต้องการในฟังก์ชั่นพิเศษของฉัน ฉันไม่ต้องการอาเรย์เก่าฉันต้องการฟังก์ชั่นที่รวดเร็ว ดังนั้นฉันจึงใช้ 2 ในขณะที่ลูป + ประกบกันunique4()
ไม่มีประโยชน์ที่จะบอกว่าฉันประทับใจ
โครเมียม:การดำเนินงานปกติ 150,000 ต่อวินาทีเพิ่มขึ้นเป็น 1,800,000 การปฏิบัติการต่อวินาที
เช่น: 80,000 op / s และ 3,500,000 op / s
ios: 18,000 op / s เทียบกับ 170,000 op / s
ซาฟารี: 80,000 op / s และ 6,000,000 op / s
หลักฐาน
http://jsperf.com/wguหรือดีกว่าใช้ console.time ... microtime ... อะไรก็ตาม
unique5()
เป็นเพียงการแสดงให้คุณเห็นว่าเกิดอะไรขึ้นถ้าคุณต้องการเก็บอาเรย์เก่าไว้
อย่าใช้Array.prototype
ถ้าคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่ ฉันเพิ่งทำสำเนาและผ่านมามากมาย ใช้Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
หากคุณต้องการสร้างต้นแบบดั้งเดิมตัวอย่าง: https://stackoverflow.com/a/20463021/2450730
การสาธิต
http://jsfiddle.net/46S7g/
หมายเหตุ: อาเรย์เก่าของคุณถูกทำลาย / กลายเป็นความแปลกใหม่หลังจากการดำเนินการนี้
หากคุณไม่สามารถอ่านรหัสข้างต้นถามอ่านหนังสือจาวาสคริปต์หรือนี่คือคำอธิบายเกี่ยวกับรหัสที่สั้นกว่า https://stackoverflow.com/a/21353032/2450730
บางส่วนจะใช้indexOf
... ไม่ ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
สำหรับอาร์เรย์ที่ว่างเปล่า
!array.length||toUnique(array);