2013-03-19 11 views
11
var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}]; 

Próbowałem:Safari nie posortować tablicę obiektów jak innych przeglądarek

function(a,b){ 
    return b.date > a.date; 
} 

i

function(a,b){ 
    return b.date - a.date; 
} 

console.log w Chrome i Firefox mi dać pożądany wynik :

"2013.03.19", "2013.03.08", "2013.03.01" 

ale Safari dać oryginalny Sortowanie:

"2013.03.01", "2013.03.08", "2013.03.19" 

Dlaczego?

+1

Co znajduje się rzeczywiste wartości na swoich obiektach? Smyczki? Obiekty daty? Kod, który wysłałeś, jest nieprawidłowy. – bfavaretto

+0

Co to jest * to *? '2013.03.01' nie wygląda jak JavaScript. – Blindy

+1

To wydaje się być opisany tutaj problem: [Dlaczego Safari 5 nie będzie sortować tablicy obiektów?] (Http://stackoverflow.com/questions/4299062/why-wont-safari-5-sort-an-array- of-objects) Jeśli nie, prawdopodobnie będziesz musiał opublikować poprawne jsfiddle, ponieważ twój istniejący kod jest zbyt niekompletny do przetestowania. – BrianHall

Odpowiedz

24

Funkcja sortowania w języku JavaScript ma zwracać liczbę rzeczywistą - nieprawdę lub fałsz, ciąg lub datę. To, czy liczba jest dodatnia, ujemna, czy zero, wpływa na wynik sortowania.

Spróbuj funkcję sortowania (który będzie również poprawnie sortowania wszelkie ciągi w odwróconej kolejności alfabetycznej):

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

"2013.03.01" nie jest randka. To ciąg.

Aby poprawnie sortować według dat, należy przekonwertować je na daty (sygnatury czasowe).

var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}]; 

myArray.sort(function(a,b){ 
    return Date.parse(b.date) - Date.parse(a.date); 
}); 

Można również móc sortować je za zbyt bezpośrednie comparasions ciągów:

myArray.sort(function(a,b){ 
    return b.date.localeCompare(a.date); 
}); 
Powiązane problemy