2009-09-04 17 views
5

Quando si chiama sort (funzione) in Javascript su un iPhone, non sembra in ordine. Per esempio:Ordinamento Javascript con funzione non funzionante su iPhone

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

ci sono alcune limitazioni note o qualcuno può aiutarmi come fare questo su un iPhone. Sembra funzionare bene in Chrome, IE, Firefox.

funzione
+0

Funziona in Safari su Windows e/o Mac OS? –

risposta

0

L'ordinamento deve restituire -1, 0 o 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

Inoltre, controlla questa ricerca binaria che ti consente di trovare rapidamente elementi in elenchi ordinati utilizzando una funzione di confronto personalizzata. http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/ –

0

si deve tornare in modo esplicito -1, 0 o 1, secondo la definizione di questa funzione immagino. Colpa mia.

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

Funziona ora.

8

La funzione di confronto è rotto: Dovrebbe restituire un valore numerico che deve essere negativo se a < b, zero se a = b e positivo se a > b, cioè

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

La funzione restituisce false se , che sarà convertito in 0 e quindi significa che i valori devono essere considerati uguali. Non dovrebbe funzionare affatto, ma se lo fa, questo è per coincidenza (cioè dipende dall'algoritmo di ordinamento e/o dall'insieme di input).

Problemi correlati