Array.prototype.sort() फ़ंक्शन की एक संपत्ति यह है कि यह एक इनप्लेस सॉर्टिंग एल्गोरिदम है, जिसका अर्थ है कि यह सॉर्ट करने के लिए सरणी की एक नई प्रतिलिपि नहीं बनाता है, यह किसी भी अतिरिक्त स्थान का उपयोग किए बिना सरणी को सॉर्ट करता है, जिससे इसे और अधिक कुशल बना दिया जाता है। प्रदर्शन करने वाला।लेकिन यह विशेषता कभी-कभी एक अजीब स्थिति की ओर ले जाती है।
इसे एक उदाहरण से समझते हैं। मान लें, हमारे पास कुछ स्ट्रिंग अक्षर के साथ एक नाम सरणी है, हम इस सरणी के क्रम को बरकरार रखना चाहते हैं और एक और सरणी चाहते हैं जिसमें नाम सरणी के समान तत्व हों लेकिन वर्णानुक्रम में क्रमबद्ध हों।
हम कुछ ऐसा कर सकते हैं -
const names = ['Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj']; let sortedNames = names; sortedNames = sortedNames.sort(); console.log(names); console.log(sortedNames);
लेकिन जैसा कि हम जावास्क्रिप्ट में जानते हैं, सरणियाँ भी वस्तुएँ होती हैं और वस्तुएँ संदर्भ द्वारा कॉपी की जाती हैं न कि मूल्य से, इसलिए एक सरणी को छाँटने से दोनों सरणियाँ छाँट जाती हैं, जो हम स्पष्ट रूप से नहीं चाहते हैं।
समाधान
<मजबूत>1. नई सरणी प्रारंभ करते समय स्लाइस () का उपयोग करना
उदाहरण
const names = ['Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj']; let sortedNames = names.slice(); sortedNames = sortedNames.sort(); console.log(names); console.log(sortedNames);
स्लाइस () विधि वास्तव में एक उथली प्रतिलिपि लौटाती है, जिसे उस सरणी के एक नए सरणी में कॉपी किया जाता है जिसके साथ इसका उपयोग किया जाता है, यदि कोई तर्क प्रदान नहीं किया जाता है तो यह शुरू से अंत तक कॉपी करता है।
हालांकि यह विधि बहुत कुशल नहीं है क्योंकि इसमें एक नई सरणी शुरू करना शामिल है और केवल स्ट्रिंग / संख्या अक्षर की सरणी के साथ प्रभावी है, दूसरी विधि थोड़ी अधिक कुशल है और वस्तुओं की सरणी के साथ भी अच्छी तरह से काम करती है।
<मजबूत>2. JSON.stringify() / JSON.parse() . का उपयोग करना
उदाहरण
const names = ['Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj']; let sortedNames = JSON.parse(JSON.stringify(names)); sortedNames = sortedNames.sort(); console.log(names); console.log(sortedNames);
सरणी को JSON स्ट्रिंग में कनवर्ट करना और वापस एक सरणी में एक तरह से संकलक को संदर्भ द्वारा प्रतिलिपि बनाने के लिए मजबूर नहीं करता है।
कंसोल में दोनों विधियों का आउटपुट समान होगा -
आउटपुट
[ 'Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj' ] [ 'Anshul', 'Dheeraj', 'Mukesh', 'Rakesh', 'Ram' ]