2016-08-25 4 views
1

Ich habe es geschafft, ein Array von Objekten nach dem Elementnamen 'post_api_name' zu sortieren. Einige dieser Elemente beginnen jedoch mit einem griechischen Symbol (z. B. α-β Arteether). Wie kann ich diese Symbole so konvertieren, dass sie neben 0-9 und nicht Z + 1 platziert werden?So sortieren Sie griechische Buchstaben/Symbole JavaScript

RESULT.sort(function(a, b) { 
    var textA = a.post_api_name.toUpperCase(); 
    var textB = b.post_api_name.toUpperCase(); 
    return (textA < textB) ? -1 : (textA > textB) ? 1 : 0; 
}); 

Aus Gründen der Klarheit zeigen die aktuellen sortiert Ergebnisse als:

a b c α

ich zu erreichen bin der Hoffnung:

α a b c

+1

Haben Sie einige Beispielanfangsdaten und das erwartete Ergebnis haben? – Xotic750

+0

Guter Punkt - Ich habe meinen ursprünglichen Beitrag aktualisiert. – Nick

+0

Sollten diese griechischen letetrs vor oder nach Zahlen oder anderen Symbolen gehen? – Xotic750

Antwort

3

Sie können versuchen, zu sortieren Verwenden des griechischen Gebietsschemas. Sie möchten mit mehr Fällen testen, da ich keine Ahnung habe, welche anderen Sortierregeln gelten könnten. Browser-Unterstützung für localeCompare ist immer noch relativ hochmodern (IE11). Vielleicht finden Sie eine poly-fill.

Vielleicht bevorzugen Sie einfach eine Liste von griechischen Zeichen, die Sie unterstützen und ersetzen Sie sie mit einem der Zeichen zwischen 9 und A zum Sortieren (:; < =>? Oder @).

var items = ['a', 'b', 'c', 'α', '9', '4', '1'] 
 

 
items.sort(function(a, b){ 
 
    return a.localeCompare(b, 'el'); 
 
}); 
 

 
console.log(items);

0

Standardmäßig wird das Dezimal-Code für die Zeichen wie 'α' von 128 d.h beginnen sie unter erweiterten ASCII-Codes kommen.

Ich weiß, dass es keine besondere Möglichkeit gibt, dies gemäß Ihrer Anforderung zu tun. Sie können die folgende Funktion ausprobieren, mit der Sie auch die normalen Zeichen sortieren und die griechischen/zusätzlichen Zeichen zuerst eingeben.

var mySortedChars = []; 

function sortMyArray(array) { 
    array.forEach(function(val) { 
     if (val.charCodeAt(0) > 127) { 
      mySortedChars.push(val); 
      _.pull(array, val); 
     } 
    }); 
    array.sort(); 
    array.forEach(function(val) { 
     mySortedChars.push(val); 
    }); 
    return mySortedChars; 
} 

Die obige Funktion gibt Ihnen die sortierten Zeichen gemäß Ihrer Anforderung zurück.

Hinweis: _.pull ist ein util aus der liash Bibliothek. Möglicherweise müssen Sie Ihre eigenen Methoden verwenden, um die Sonderzeichen zu spleißen, anstatt _.pull(array, val);

0

Eine mögliche Lösung, die in ES6 geschrieben wird, zu verwenden. Teilen Sie Daten in Standard- und griechische Startelemente auf. Sortieren Sie diese Ergebnisse und versehen Sie sie dann.

const greekLower = new Set(); 
 
for (let c = 0x3B1; c < 0x3C9; c += 1) { 
 
    greekLower.add(String.fromCodePoint(c)); 
 
} 
 
const data = ['xa', 'αb', 'yc', 'βd', 'ae', '1f', 'γg', '9h']; 
 
const standard = []; 
 
const greek = []; 
 
for (let v of data) { 
 
    if (greekLower.has(v.charAt(0).toLowerCase())) { 
 
    greek.push(v); 
 
    } else { 
 
    standard.push(v); 
 
    } 
 
} 
 
standard.sort(); 
 
greek.sort(); 
 
const sorted = greek.concat(standard); 
 
document.getElementById('out').textContent = JSON.stringify(sorted); 
 
console.log(sorted);
<pre id="out"></pre>