2009-09-04 4 views
5

Podczas wywoływania funkcji sortowania w języku JavaScript na urządzeniu iPhone nie wygląda na sortowanie. Na przykład:Sortowanie w języku JavaScript z funkcją nie działającą na telefonie iPhone

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

Czy są jakieś znane ograniczenia lub może ktoś mi pomóc jak to zrobić na iPhone. Wygląda na to, że działa dobrze w Chrome, IE, Firefox.

funkcja
+0

Czy działa w Safari na Windows i/lub Mac OS? –

Odpowiedz

0

Sortowanie musi powrócić -1, 0 lub 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

Sprawdź także ten plik binarySearch, który umożliwia szybkie wyszukiwanie pozycji na dużych, posortowanych listach przy użyciu niestandardowej funkcji porównującej. http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/ –

0

Trzeba wyraźnie zwracają -1, 0 lub 1, zgodnie z definicją tej funkcji chyba. Mój błąd.

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

Działa teraz.

8

Twoja funkcja porównanie jest uszkodzony: Należy zwrócić wartość liczbową, która musi być ujemna, jeśli a < b, zero jeśli a = b i pozytywny, jeżeli a > b, tj

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

Twój zwraca false jeśli , który będzie przekonwertowane na 0, a zatem oznacza, że ​​wartości powinny być traktowane jako równe. To nie powinno działać w ogóle, ale jeśli tak, to jest przez przypadek (tj. Zależy od algorytmu sortowania i/lub zestawu wejściowego).

Powiązane problemy