Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

JavaScript में .sort() मेथड की समस्या ठीक करें: एक के बजाय दो ऐरे सॉर्ट हो जाते हैं


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' ]

  1. जावास्क्रिप्ट Array.from() मेथड जावास्क्रिप्ट Array.from() मेथड

    जावास्क्रिप्ट का from() मेथड किसी ऑब्जेक्ट से जिसमें length प्रॉपर्टी हो या किसी इटरेबल ऑब्जेक्ट से Array ऑब्जेक्ट लौटाने के लिए उपयोग किया जाता है। सिंटैक्स इस प्रकार है: Array.from(obj, mapFunction, thisArg) ऊपर, पैरामीटर obj एरे में बदलने वाला ऑब्जेक्ट है, mapFunction कॉल करने के लिए मैप फंक्शन

  1. JavaScript Sort() मेथड JavaScript Sort() मेथड

    JavaScript Sort() मेथड का उपयोग ऐरे को सॉर्ट करने के लिए किया जाता है। सॉर्टिंग का क्रम वर्णमाला, न्यूमेरिक, आरोही या अवरोही हो सकता है।उदाहरण<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="

  1. क्या हम दो ऐरे को एक जावास्क्रिप्ट ऑब्जेक्ट में बदल सकते हैं? क्या हम दो ऐरे को एक जावास्क्रिप्ट ऑब्जेक्ट में बदल सकते हैं?

    दो ऐरे को एक जावास्क्रिप्ट ऑब्जेक्ट में बदलने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>