2009-09-04 25 views
5

Bir iPhone'da Javascript'te sort (function) çağrıldığında bir iPhone sıralamada görünmüyor. Örneğin : Javascript sıralama işleviyle çalışmaz iPhone üzerinde çalışıyor

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

bazı bilinen bir sınırlama var mı ya da birinin nasıl bir iPhone'da bunu yapmak için bana yardımcı olabilir. Chrome, IE, Firefox'ta iyi çalışıyor gibi görünüyor.

+0

Windows ve/veya Mac OS'ta Safari'de çalışıyor mu? –

cevap

0

sıralama işlevi You have -1, 0 veya 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

Ayrıca, özel bir karşılaştırıcı işlevini kullanarak büyük sıralanmış listelerdeki öğeleri hızlıca bulmanızı sağlayan bu ikili aramaya bakın. http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/ –

0

açıkça dönmek dönmek gerekiyor -1, 0 veya 1, sanırım bu işlevin tanım gereği. Benim hatam.

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

Şuanda çalışıyor.

8

Karşılaştırma işlevi bozuldu: Bu a < b ise negatif olarak sahip olan bir sayısal değer döndürmelidir, sıfır a > b ise pozitif a = b ve eğer olacak false, yani eğer

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

İşleviniz döner 0'a dönüştürülür ve bu nedenle değerlerin eşit olarak kabul edilmesi gerektiği anlamına gelir. Hiç işe yaramaz, ama eğer öyle olursa, bu tesadüfle (yani sıralama algoritmasına ve/veya girdi kümesine bağlıdır).

İlgili konular