簡體   English   中英

如何排序希臘字母/符號JavaScript

[英]How to sort greek letters/symbols JavaScript

我已經設法按元素名稱'post_api_name'對對象數組進行排序,但是這些元素中的一些以希臘符號開頭(例如α-βArteether)。 如何將這些符號轉換為0-9而不是Z + 1。

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;
});

為清楚起見,當前排序的結果顯示為:

abcα

我希望實現:

αabc

您可以嘗試使用希臘語區域設置進行排序。 您可能希望測試更多案例,因為我不知道可以應用哪些其他排序規則。 瀏覽器對localeCompare的支持仍然相對前沿(IE11)。 也許你可以找到一個poly-fill

也許更優選的是,您可能只有一個支持的希臘字符列表,並用9和A之間的字符之一替換它們以進行排序(:; <=>?或@)。

 var items = ['a', 'b', 'c', 'α', '9', '4', '1'] items.sort(function(a, b){ return a.localeCompare(b, 'el'); }); console.log(items); 

默認情況下,像'α'這樣的字符的十進制代碼將從128開始,即它們屬於擴展的ASCII代碼。

我知道根據您的要求,沒有特別的方法可以做到這一點。 您可以嘗試下面的功能,它將實現您對正常字符的排序,並首先放置希臘/附加字符。

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;
}

上面的函數將根據您的要求返回已排序的字符。

注意_.pull是來自lodash庫的util。 您可能必須使用自己的方法來拼接特殊字符,而不是使用_.pull(array, val);

用ES6編寫的可能解決方案。 將數據拆分為標准和希臘起始元素。 對這些結果進行排序然后連接它們。

 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> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM