2013-10-08 6 views
6

मैं है कुछ JSON प्रारूप ऐसा है कि:छंटाई JSON (विशिष्ट तत्व द्वारा) वर्णानुक्रम

places =[ 
    { 
     "city":"Los Angeles", 
     "country":"USA", 
    }, 
    { 
     "city":"Boston", 
     "country":"USA", 
    }, 
    { 
     "city":"Chicago", 
     "country":"USA", 
    }, 
] 

वगैरह ...

मैं इस सॉर्ट करने के लिए कोशिश कर रहा हूँ वर्णानुक्रम शहर द्वारा और हो रहा है ऐसा करने में परेशानी। मेरा मानना ​​है कि मेरे मुद्दे की जड़ वर्णों के क्रम (बनाम संख्याओं) का निर्धारण करने लगती है। मैंने एक सरल कोशिश की है:

places.sort(function(a,b) { 
    return(a.city) - (b.customInfo.city); 
    }); 

अभी तक, यह घटाव नहीं जानता कि क्या करना है। क्या कोई मेरी मदद कर सकता है?

उत्तर

21

दुर्भाग्य से जावास्क्रिप्ट में कोई सामान्य "तुलना" फ़ंक्शन सॉर्ट() के लिए उपयुक्त मान वापस करने के लिए नहीं है। मैं एक तुलनास्ट्रिंग फ़ंक्शन लिखूंगा जो तुलना ऑपरेटर का उपयोग करता है और फिर इसे सॉर्ट फ़ंक्शन में उपयोग करता है।

function compareStrings(a, b) { 
    // Assuming you want case-insensitive comparison 
    a = a.toLowerCase(); 
    b = b.toLowerCase(); 

    return (a < b) ? -1 : (a > b) ? 1 : 0; 
} 

places.sort(function(a, b) { 
    return compareStrings(a.city, b.city); 
}) 
+0

पवित्र बकवास, मेटी, मैं तुम्हें एक बीयर देने हैं।

+2

तुलना काम करती है क्योंकि '<' और मित्रों को तारों के लिए लेक्सिकोोग्राफिक ऑर्डरिंग का उपयोग करने के लिए परिभाषित किया जाता है। आंतरिक रूप से यह प्रत्येक मिलान करने वाले चरित्र की जांच करता है और जब इसे दो अलग-अलग यूनिकोड मान मिलते हैं, तो यह लौटाता है, जिसके परिणामस्वरूप "शब्दकोश" ऑर्डरिंग होती है। यही कारण है कि मैंने केवल मामले में LowerCase() कॉल में जोड़ा, क्योंकि तुलना स्वयं केवल कोडपॉइंट मानों की तुलना करती है। यह मामले की जांच नहीं करता है। –

4

मेटी के समाधान सही है, लेकिन आप इसे अधिक सरलता लिख ​​सकते हैं। आपको अतिरिक्त फ़ंक्शन कॉल की आवश्यकता नहीं है; आप तर्क को सीधे sort कॉलबैक में डाल सकते हैं।

केस-संवेदी छंटाई के लिए:

places.sort(function(a, b) { 
    a = a.city.toLowerCase(); 
    b = b.city.toLowerCase(); 

    return a < b ? -1 : a > b ? 1 : 0; 
}); 

केस-संवेदी छंटाई के लिए:

places.sort(function(a, b) { 
    return a.city < b.city ? -1 : a.city > b.city ? 1 : 0; 
}); 
संबंधित मुद्दे