2016-08-03 2 views
0

Ich bin versucht, eine Reihe von Zeitzone Offsets zu sortieren, die wie folgt aussieht:benutzerdefinierte Sortierung für eine Reihe von Zeitzone Offsets

["+03:00", "-11:00", "+05:00", "-04:00"]

Dies ist nur eine Teilmenge des Arrays. Alle Offsets für GMT-basierte Zeitzonen sind enthalten. Die logische Reihenfolge würde Abstand von GMT mit -11.00 Start

Also die letzte würde korrekte Reihenfolge sein:

["-11:00", "-04:00", "+03:00", "+05:00"]

Ich würde Array.prototype.sort hier verwenden, aber ich bin mir nicht ganz sicher, was die effektivste benutzerdefinierte Sortierfunktion hier zu verwenden wäre. Würde es bedeuten, die Saite in zwei Teile zu zerlegen? zB: -|+ und offset, zB: 11, 4, 3, 5 und dann diese vergleichen? Gibt es eine Möglichkeit, dies mit weniger Verarbeitung zu tun?

+0

Haben Sie jemals mit "Half Hour Zonen" zu tun? dh. Darwin/Australien ist '+9: 30' oder sind das ganze Zahlen? – haxxxton

+0

Müssen die Einträge im Array Strings sein? Könnten sie Zahlen sein? – SpiderPig

Antwort

2

Sortierfunktion sollte

function(a, b) { 
    return parseFloat(a.replace(':', '.')) - parseFloat(b.replace(':', '.')); 
} 

im Grunde, die : ein . ändern und gibt die Differenz in dem resultierenden analysiert Schwimmer

Sie können auch Folgendes tun:

function(a, b) { 
    parseInt(a.replace(':', ''), 10) - parseInt(b.replace(':', ''), 10); 
}; 

Dies würde die Zeichenfolgen in +/-HHMM konvertieren, die Sie dann als Ganzzahl analysieren können und trotzdem die Nr. Unterstützen können t Unwesentliche Anzahl von Zeitzonen nicht ganzer Stunde. Obwohl ich nicht glaube, es gibt so viel Leistung zu

0

gewonnen werden Unter der Annahme, dass die Zeitzonen immer in :00 beenden können Sie einfach parseInt sie:

["+03:00", "-11:00", "+05:00", "-04:00"].sort(
    (a, b) => (a, 10) > parseInt(b, 10) 
); 

parseInt wird eine Zeichenfolge lesen, bis es Zeichen findet, dass Don sehe nicht wie Zahlen aus. Zum Beispiel gibt parseInt('1a')1 zurück. Da der erste Teil von '-11:00' eine gültige Nummer ist ('-11'), liest parseInt sie korrekt.

+0

, die mit nicht ganzen Stunden Zeitzonen fehlschlagen würde –