2009-09-04 9 views
5

किसी iPhone पर जावास्क्रिप्ट में सॉर्ट (फ़ंक्शन) को कॉल करते समय यह सॉर्ट नहीं लगता है। उदाहरण के लिए:आईफोन पर काम नहीं कर रहे फ़ंक्शन के साथ जावास्क्रिप्ट सॉर्ट

devices.sort(function(a, b) { 
        return a.name > b.name; 
       }); 

वहाँ कुछ ज्ञात सीमाओं हैं या कोई मेरी मदद कैसे एक iPhone पर यह करने के लिए कर सकते हैं। ऐसा लगता है कि क्रोम, आईई, फ़ायरफ़ॉक्स में ठीक काम करता है।

+0

क्या यह विंडोज और/या मैक ओएस पर सफारी में काम करता है? –

उत्तर

0

तरह समारोह वापस जाने के लिए -1, 0, या 1.

devices.sort(function(a, b) { 
    if (a.name < b.name) { 
    return -1; 
    } else if (a.name == b.name) { 
    return 0; // ambiguous 
    } else { 
    return 1; 
    } 
}); 
+0

इसके अलावा, इस बाइनरी सर्च को देखें जो आपको एक कस्टम तुलनित्र फ़ंक्शन का उपयोग करके बड़ी क्रमबद्ध सूचियों में आइटम ढूंढने की अनुमति देता है। http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/ –

0

आपके पास स्पष्ट रूप से वापस जाने के लिए की जरूरत है -1, 0 या 1, इस समारोह मुझे लगता है की परिभाषा के अनुसार। मेरी गलती।

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

अब काम करता है।

8

आपका तुलना समारोह टूट गया है: यह एक संख्यात्मक मूल्य जो अगर a < b नकारात्मक हो गया है लौटना चाहिए, शून्य a = b यदि और सकारात्मक अगर a > b, यानी

function(a, b) { 
    return a.name < b.name ? -1 : a.name > b.name ? 1 : 0; 
} 

आपका फ़ंक्शन false अगर है, जो हो जाएगा 0 में परिवर्तित किया गया और इसलिए इसका मतलब है कि मानों को बराबर माना जाना चाहिए। यह बिल्कुल काम नहीं करना चाहिए, लेकिन अगर ऐसा होता है, तो यह संयोग से होता है (यानी सॉर्टिंग एल्गोरिदम और/या इनपुट सेट पर निर्भर करता है)।

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