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