2013-06-10 4 views
6

मुझे निम्नानुसार अल्फान्यूमेरिकल आइटमों की एक सरणी सॉर्ट करने की आवश्यकता है। से:क्रमबद्ध अल्फान्यूमेरिक स्ट्रिंग descending

2 xxx 
20 axxx 
38 xxxx 
20 bx 
8540 xxxxxx 

रहे हैं:

8540 xxxxx 
38 xxxx 
20 axxx 
20 bx 
2 xxx 

इस प्रकार, संख्या के संबंध में उतरते क्रमबद्ध तो वर्णानुक्रम आरोही। संख्याएं हमेशा एक ही स्थान से वर्णमाला वर्णों (निर्दिष्ट "xxxx") से अलग होती हैं, लेकिन संख्याएं परिवर्तनीय लंबाई होती हैं।

मुझे संदेह है कि मुझे सॉर्ट() फ़ंक्शन में कुछ रेगेक्स का उपयोग करने और स्थान को संख्याओं को विभाजित करने की आवश्यकता है, लेकिन मुझे नहीं पता कि वर्णमाला क्रमबद्धता में कैसे जुड़ना है। कोई कोड नमूने? बहुत बहुत धन्यवाद!

+0

चेक बाहर इन उत्तरों यह देखने के लिए कि क्या आप अनुकूलित कर सकते हैं समाधान: http://stackoverflow.com/a/4321879/1375372 http://stackoverflow.com/a/11931192/1375372 http://stackoverflow.com/a/4340339/1375372 –

उत्तर

6

RegEx के लिए कोई ज़रूरत नहीं है, क्योंकि Array.sort() कस्टम समारोह स्वीकार करता है:

http://jsfiddle.net/EFGK9/

var arr=["2 xxx","20 axxx","38 xxxx","20 bx","8540 xxxxxx"]; 
arr.sort(function(a,b){ 
    a=a.split(" "); 
    b=b.split(" "); 
    var an=parseInt(a[0],10); 
    var bn=parseInt(b[0],10); 
    return an<bn?1:(an>bn?-1:(a[1]<b[1]?-1:(a[1]>b[1]?1:0))); 
}); 
console.log(arr); 
+1

ओपी जानता है कि '। सॉर्ट() 'एक कस्टम फ़ंक्शन स्वीकार करता है; वे उस फ़ंक्शन के भीतर रेगेक्स का उपयोग करने के बारे में सोच रहे थे (हालांकि, जैसा कि आपने बताया है, '.split() 'इस मामले में पर्याप्त है, एक अधिक जटिल इनपुट प्रारूप रेगेक्स के लिए कॉल कर सकता है)। – nnnnnn

+0

@Passerby बहुत बहुत धन्यवाद! यह पूरी तरह से काम करता है !! – Wagtail

4

कुछ इस तरह काम करेगा:

var arr = [ 
    "2 xxx", 
    "20 axxx", 
    "38 xxxx", 
    "20 bx", 
    "8540 xxxxxx" 
    ]; 

arr.sort(function(a, b) { 
    var aParts = a.split(" "), 
     bParts = b.split(" "), 
     aNum = +aParts[0], // convert numeric parts 
     bNum = +bParts[0]; // to actual numbers 

    if (aNum > bNum) 
     return -1; 
    else if (aNum < bNum) 
     return 1; 
    else 
     return aParts[1].localeCompare(bParts[1]); 
}); 

डेमो: http://jsfiddle.net/KLa2J/

+0

बस एक साइड नोट के रूप में, jsfiddle मेरे लिए काम नहीं कर रहा है। मैं देखता हूं कि यह सैद्धांतिक रूप से कैसे काम करना चाहिए, लेकिन विभाजन ("") फ़ंक्शन में समस्याएं हैं। वैसे भी अच्छे जवाब के लिए धन्यवाद! – Wagtail

+1

मैं नहीं देखता कि कैसे .split ("") 'आपको समस्याएं पैदा कर सकता है जब आपके द्वारा स्वीकार किए गए उत्तर एक ही तकनीक का उपयोग करते हैं। आप आईई के पुराने संस्करण के साथ पहेली का परीक्षण करने की कोशिश नहीं कर रहे हैं? मैंने एक 'console.log() 'कथन शामिल किया है, जो पुराने आईई में एक त्रुटि देता है अगर कंसोल उस समय वास्तव में खुला नहीं है, लेकिन अन्यथा यह ठीक काम करता है। – nnnnnn

+0

आह, मैं देखता हूं। Jsfiddle क्रोम – Wagtail

संबंधित मुद्दे