2016-05-10 12 views
4

Ich kann meinen JavaScript-lokalisierten Zeichenfolgenvergleich nicht in jedem Browser auf iPads oder iPhones verwenden. Hat jemand das Gleiche erlebt oder weiß man etwas darüber?localeCompare unter iOS

Ich habe auch versucht, schwedischen Gebietsschema zu erzwingen, um sicherzustellen, dass es kein Problem ist, das richtige Gebietsschema aus dem Betriebssystem abzurufen. Trotzdem kann ich den korrekten Vergleich der länderspezifischen Zeichen nicht finden.

let mixedChars = ['å','ä','o'] 
mixedChars.sort(function(a,b) {return a.localeCompare(b, 'sv-SE')}) 
alert(JSON.stringify(mixedChars)) 

// in iOS using Chrome or FF => å,ä,o 
// in any other setup I have tried => o,å,ä which is according the Swedish alphabet. 

Irgendwelche Ideen, was das verursachen könnte, wird sehr geschätzt.

Antwort

2

Ich habe einen iPod oder iPhone nicht zu testen, aber ihr Browser möglicherweise nicht unterstützt localeCompare mit Ihrem locale Argumente:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare#Browser_compatibility

Wenn Sie kennen das Alphabet Sie mit zu tun haben werden, können Sie konstruiere eine Aufzählung über seine Zeichen (in alphabetischer Reihenfolge) und benutze sie zum Sortieren von Zeichenfolgen:

var alphabet, enumeration, comparator, mixedChars, i, c; 

alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
      'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 
      'Å', 'Ä', 'Ö', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
      'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 
      'x', 'y', 'z', 'å', 'ä', 'ö']; 

enumeration = {}; 

for (i = 0; i < alphabet.length; i += 1) { 
    c = alphabet[i]; 
    enumeration[c] = i; 
} 

comparator = function (a, b) { 
    var j, k, d, x, y; 

    k = Math.min(a.length, b.length); 
    for (j = 0; j < k; j += 1) { 
     x = a[j]; 
     y = b[j]; 
     d = enumeration[x] - enumeration[y]; 
     if (0 !== d) { 
      return d; 
     } 
    } 

    if (j < a.length) { 
     return 1; 
    } 

    if (j < b.length) { 
     return -1; 
    } 

    return 0; 
}; 

mixedStrings = [ 
    'äA', 
    'å', 
    'ä', 
    'äAö', 
    'Ä', 
    'Äo', 
    'äAöO', 
    'o' 
]; 

mixedStrings.sort(comparator); 

// Alerts, ["Ä","Äo","o","å","ä","äA","äAö","äAöO"] 
alert(JSON.stringify(mixedStrings)); 
+0

Danke Dylon. Mein Beispielcode war ein bisschen schlecht. Ich habe das Gebietsschema-Attribut verwendet, um es klarer zu machen, aber es wird nicht überall unterstützt. Allerdings sollte das Browser- oder Systemgebietsschema sein. Meine Benutzerbasis ist nicht auf eine kleine Anzahl von Sprachen beschränkt, also erstelle und pflege meine eigenen Charaktertabellen oder akzeptiere einfach dieses Problem auf iOS. –

Verwandte Themen