如何排序希腊字母/符号JavaScript

时间:2016-08-25 10:33:40

标签: 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;
});

为清楚起见,当前排序的结果显示为:

一 b C α

我希望实现:

α 一个 b ç

3 个答案:

答案 0 :(得分:3)

您可以尝试使用希腊语区域设置进行排序。您可能希望测试更多案例,因为我不知道可以应用哪些其他排序规则。浏览器对localeCompare的支持仍然相对前沿(IE11)。也许你可以找到poly-fill

也许更优选的是,您可能只有一个支持的希腊字符列表,并将其替换为9和A之间的字符之一用于排序目的(:;&lt; =&gt;?或@)。

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

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

console.log(items);

答案 1 :(得分:0)

默认情况下,“α”等字符的十进制代码将从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);

答案 2 :(得分:0)

用ES6编写的可能解决方案。将数据拆分为标准和希腊起始元素。对这些结果进行排序,然后将它们连接起来。

&#13;
&#13;
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);
&#13;
<pre id="out"></pre>
&#13;
&#13;
&#13;