2009-09-04 14 views
5

iPhoneのJavascriptでsort(関数)を呼び出すと、ソートされていないようです。たとえば : Javascriptのソート機能がiPhoneで動作しない

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

は、いくつかの既知の制限はありますか誰かがどのようにiPhone上でこれを行うために私を助けることができます。 Chrome、IE、Firefoxで正常に動作するようです。

+0

WindowsやMac OSのSafariで動作しますか? –

答えて

0

ソート機能は、あなたが明示的に私は推測する、この関数の定義に従って、-1、0または1を返す必要が-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

また、カスタムコンパレータ関数を使用して大きなソートリスト内の項目をすばやく見つけることができるこのbinarySearchをチェックしてください。 http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/ –

0

を返す必要があります。私の悪い。

    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に変換され、したがって、値が等しいとみなされるべきであることを意味します。それはまったく働くべきではありませんが、そうであれば、これは偶然のことです(ソートアルゴリズムや入力セットに依存します)。

関連する問題