दिलचस्प पोस्ट
प्रकार और कक्षा में क्या अंतर है? स्ट्रिंग में चरित्र के nth घटना को कैसे ढूंढें? क्या मैं एक iPhone उपयोगकर्ता को किसी एप्लिकेशन को अपग्रेड करने के लिए मजबूर कर सकता हूं? गिट वर्कफ़्लो और रीबेस बनाम मर्ज प्रश्न तुलनात्मक और तुलनात्मक उपयोग करने के लिए कब मैं कैट का उपयोग कैसे कर सकता हूँ << myclass Crossthread संचालन मान्य नहीं है … – VB.NET जावा में वर्ण-शब्द के कई अक्षरों के बाद स्ट्रिंग को लपेटें jQuery / जावास्क्रिप्ट "यह" सूचक भ्रम Oracle (ORA-02270): इस कॉलम-सूची त्रुटि के लिए कोई मिलान या अनन्य प्राथमिक कुंजी नहीं है सी में कंसोल से एक लाइन को कैसे पढ़ा जाए? कार्यात्मक स्टेटलेस घटक, PureComponent, घटक पर प्रतिक्रिया दें; अंतर क्या हैं और हमें कब उपयोग करना चाहिए? अजगर के रूप में एक सूची बनाओ (वर्तमान, अगले) पायथन में पार्सल चला सकते हैं समानांतर में आदेश? रिकॉर्डों को खोजने के लिए एसक्यूएल क्वेरी जहां गिनती> 1

जावास्क्रिप्ट में प्रथमनाम (वर्णानुक्रमिक रूप से) के अनुसार क्रमबद्ध सरणी

मुझे एक सरणी मिली है (सरणी में एक ऑब्जेक्ट के लिए नीचे देखें) जिसे मुझे जावास्क्रिप्ट का उपयोग करके प्रथम नाम से सॉर्ट करने की आवश्यकता है। मैं यह कैसे कर सकता हूं?

var user = { bio: null, email: "user@domain.com", firstname: "Anna", id: 318, lastAvatar: null, lastMessage: null, lastname: "Nickson", nickname: "anny" }; 

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट में प्रथमनाम (वर्णानुक्रमिक रूप से) के अनुसार क्रमबद्ध सरणी"

मान लीजिए आपके पास सरणी users आप users.sort उपयोग कर सकते हैं और एक फ़ंक्शन पास कर सकते हैं जो दो तर्कों को लेता है और उनकी तुलना करें (तुलनित्र)

इसे वापस करना चाहिए

  • कुछ नकारात्मक अगर पहली तर्क दूसरे से कम है (परिणामस्वरूप सरणी में दूसरे से पहले रखा जाना चाहिए)
  • कुछ तर्क यदि पहले तर्क बड़ा है (दूसरे के बाद रखा जाना चाहिए)
  • 0 यदि उन दो तत्व समान हैं।

हमारे मामले में यदि दो तत्व a और b होते हैं तो हम a.firstname और b.firstname तुलना करना चाहते हैं

उदाहरण:

 users.sort(function(a, b){ if(a.firstname < b.firstname) return -1; if(a.firstname > b.firstname) return 1; return 0; }) 

यह कोड किसी भी प्रकार के साथ काम करने जा रहा है।

ध्यान दें कि "वास्तविक जीवन" में आप अक्सर मामले को अनदेखा करना चाहते हैं, सही ढंग से सॉर्ट डाइक्रिटिक्स, अजीब प्रतीक जैसे ß, आदि जब आप स्ट्रिंग्स की तुलना करते हैं, तो आप localeCompare का उपयोग कर सकते हैं localeCompare स्पष्टता के लिए अन्य उत्तर देखें

कुछ इस तरह:

 array.sort(function(a, b){ var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase(); if (nameA < nameB) //sort string ascending return -1; if (nameA > nameB) return 1; return 0; //default return value (no sorting) }); 

अगर तार की तुलना में यूनिकोड वर्ण होते हैं तो आप निम्न की तरह String क्लास के localeCompare फ़ंक्शन का उपयोग कर सकते हैं:

 users.sort(function(a,b){ return a.firstname.localeCompare(b.firstname); }) 

ES6 के साथ सबसे कम संभव कोड!

 users.sort((a, b) => a.firstname.localeCompare(b.firstname)) 

String.prototype.localeCompare () बुनियादी समर्थन सार्वभौमिक है!

अच्छा थोड़ा ES6 एक लाइनर:

 users.sort((a, b) => a.firstname !== b.firstname ? a.firstname < b.firstname ? -1 : 1 : 0); 

underscorejs बहुत ही अच्छा _.sortBy फ़ंक्शन प्रदान करता है:

 _.sortBy([{a:1},{a:3},{a:2}], "a") 

या आप एक कस्टम सॉर्ट फ़ंक्शन का उपयोग कर सकते हैं:

 _.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return iatoLowerCase()}) 

असल में आप विधि सॉर्ट के साथ सरणियों को सॉर्ट कर सकते हैं, लेकिन अगर आप ऑब्जेक्ट सॉर्ट करना चाहते हैं तो आपको सरणी की विधि को सॉर्ट करने के लिए फ़ंक्शन पास करना होगा, इसलिए मैं आपको अपने सरणी का उपयोग करने के लिए एक उदाहरण देता हूं।

 user = [{ bio: "<null>", email: "user@domain.com", firstname: 'Anna', id: 318, "last_avatar": "<null>", "last_message": "<null>", lastname: 'Nickson', nickname: 'anny' }, { bio: "<null>", email: "user@domain.com", firstname: 'Senad', id: 318, "last_avatar": "<null>", "last_message": "<null>", lastname: 'Nickson', nickname: 'anny' }, { bio: "<null>", email: "user@domain.com", firstname: 'Muhamed', id: 318, "last_avatar": "<null>", "last_message": "<null>", lastname: 'Nickson', nickname: 'anny' }]; var ar = user.sort(function(a, b) { var nA = a.firstname.toLowerCase(); var nB = b.firstname.toLowerCase(); if(nA < nB) return -1; else if(nA > nB) return 1; return 0; }); 

एक अधिक कॉम्पैक्ट नोटेशन:

 user.sort(function(a, b){ return a.firstname == b.firstname ? 0 : a.firstname < b.firstname ? -1 : 1; }) 

कुंजी द्वारा सॉर्ट करने के लिए एक शीर्ष प्रोटोटाइप में शीर्ष उत्तर को निकाल दिया

 Array.prototype.alphaSortByKey= function (key) { this.sort(function (a, b) { if (a[key] < b[key]) return -1; if (a[key] > b[key]) return 1; return 0; }); return this; }; 

आप अंतर्निहित सरणी विधि का उपयोग कर सकते हैं – sort यह विधि एक परम के रूप में एक कॉलबैक विधि लेता है

// custom sort function to be passed as param/callback to the Array's sort method function myCustomSort(a, b) { return (a.toLowerCase() > b.toLowerCase()) ? 1 : -1; } // Actual method to be called by entity that needs sorting feature function sortStrings() { var op = Array.prototype.sort.call(arguments, myCustomSort); } // Testing the implementation var sortedArray = sortStrings("Burger", "Mayo1", "Pizza", "boxes", "Apples", "Mayo"); console.log(sortedArray); //["Apples", "boxes", "Burger", "Mayo", "Mayo1", "Pizza"]
// custom sort function to be passed as param/callback to the Array's sort method function myCustomSort(a, b) { return (a.toLowerCase() > b.toLowerCase()) ? 1 : -1; } // Actual method to be called by entity that needs sorting feature function sortStrings() { var op = Array.prototype.sort.call(arguments, myCustomSort); } // Testing the implementation var sortedArray = sortStrings("Burger", "Mayo1", "Pizza", "boxes", "Apples", "Mayo"); console.log(sortedArray); //["Apples", "boxes", "Burger", "Mayo", "Mayo1", "Pizza"] 

इस कोड को समझने के लिए प्रमुख बिंदुओं को ध्यान में रखा जाना चाहिए।

  1. कस्टम पद्धति, इस मामले में, myCustomSort , प्रत्येक तत्व जोड़ी के लिए +1 या -1 (इनपुट एरे से) तुलना करना चाहिए।
  2. कस्टम सॉर्टिंग कॉलबैक विधि में toLowerCase() / toLowerCase() उपयोग करें, ताकि मामला अंतर सॉर्टिंग प्रक्रिया की शुद्धता को प्रभावित न करे।

मुझे उम्मीद है कि यह स्पष्ट पर्याप्त स्पष्टीकरण है अगर आपको लगता है कि टिप्पणी करने में असमर्थ हैं, तो अधिक जानकारी की आवश्यकता है।

चीयर्स!

केस संवेदी से छुटकारा पाने के लिए आप कुछ इसी तरह का उपयोग कर सकते हैं

 users.sort(function(a, b){ //compare two values if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1; if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1; return 0; })