如何对希腊字母/符号进行排序JavaScript
问题描述:
我设法按元素名称'post_api_name'对对象数组进行排序,但其中一些元素以希腊符号(例如α-βArteether)开头。如何将这些符号转换为与0-9而非Z + 1一起放置。如何对希腊字母/符号进行排序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;
});
为了清楚起见,目前的分类结果显示为:
一个 b Ç α
我希望能实现:
α 一个 b Ç
答
你可以尝试排序使用希腊语区域。你会想测试更多的案例,因为我不知道其他排序规则可以应用。浏览器支持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库一个实用程序。您可能必须使用自己的方法拼接特殊字符,而不是使用_.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>
你有一些例如初始数据和预期的结果? – Xotic750
好点 - 我已经更新了我原来的帖子。 – Nick
这些希腊字母应该在数字还是其他符号之前或之后出现? – Xotic750