केवल प्रदर्शन! यह कोड शायद यहां के सभी कोडों से 10X तेज है सभी ब्राउज़रों पर काम करता है और इसमें सबसे कम मेमोरी प्रभाव भी होता है .... और अधिक
यदि आपको पुराने सरणी का पुन: उपयोग करने की आवश्यकता नहीं है, तो इससे पहले कि आप इसे अनूठे में बदल दें, आवश्यक अन्य संचालन करें, ऐसा करने का शायद सबसे तेज़ तरीका है, बहुत कम।
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/
मुझे लूप पसंद नहीं है। यह कई मापदंडों के लिए है। मैं जबकि लूप की तरह। जबकि सभी ब्राउज़रों में सबसे तेज़ लूप है, सिवाय हम सभी को इतना पसंद है ... क्रोम।
वैसे भी मैंने पहला फ़ंक्शन लिखा है जो उपयोग करता है। और हां यह लेख में पाए गए फ़ंक्शन की तुलना में थोड़ा तेज़ है। लेकिन पर्याप्त नहीं है।unique2()
अगले चरण में आधुनिक जे.एस. Object.keys
मैंने js1.7 के Object.keys के साथ लूप के लिए दूसरे को बदल दिया ... थोड़ा तेज और छोटा (क्रोम 2x में तेजी से);)। पर्याप्त नहीं!।unique3()
।
इस बिंदु पर मैं इस बारे में सोच रहा था कि मुझे वास्तव में MY के अनोखे कार्य की क्या आवश्यकता है। मैं पुराने सरणी की जरूरत नहीं है, मैं एक तेजी से कार्य करना चाहते हैं। इसलिए मैंने 2 का उपयोग किया, जबकि लूप + ब्याह।unique4()
यह कहने के लिए बेकार है कि मैं प्रभावित था।
क्रोम: सामान्य 150,000 ऑपरेशन प्रति सेकंड 1,800,000 ऑपरेशन प्रति सेकंड की छलांग लगाते हैं।
यानी: 80,000 से अधिक ऑप्स बनाम ऑप्स
ios: 18,000 op / s बनाम 170,000 सेशन / से
सफारी: 80,000 से अधिक ऑप्स 6,000,000 ऑप्स / एस
सबूत
http://jsperf.com/wgu या बेहतर उपयोग कंसोल.टाइम ... माइक्रोटाइम ... जो भी हो
unique5()
बस आपको यह दिखाना है कि यदि आप पुरानी सारणी रखना चाहते हैं तो क्या होगा।
Array.prototype
अगर यू को पता नहीं है कि आपका क्या कर रहा है तो इसका उपयोग न करें । मैं बस कॉपी और अतीत की एक बहुत कुछ किया था। Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
यदि आप एक मूल प्रोटोटाइप बनाना चाहते हैं तो उपयोग करें। उदाहरण: https://stackoverflow.com/a/20463021/2450730
डेमो
http://jsfiddle.net/46S7g/
नोट: आपका पुराना सरणी नष्ट हो गया है / इस ऑपरेशन के बाद becomestheunique।
यदि आप ऊपर दिए गए कोड को नहीं पूछ सकते हैं, तो एक जावास्क्रिप्ट पुस्तक पढ़ें या यहां छोटे कोड के बारे में कुछ स्पष्टीकरण दिए गए हैं। https://stackoverflow.com/a/21353032/2450730
कुछ का उपयोग कर रहे हैं indexOf
... नहीं ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
खाली सरणियों के लिए
!array.length||toUnique(array);