如何在ul li中读取testArrray
并对该列表进行排序?lis.sort(function(a,b))
支持英语/阿拉伯语/和字母表,不支持波斯语字母表。请帮助我。谢谢
var alphabets = ["ا", "ب", "پ", "ت", "ث", "ج", "چ", "ح", "خ", "د", "ذ", "ر", "ز", "ژ", "س", "ش", "ص", "ض", "ط", "ظ", "ع", "غ", "ف", "ق",
"ک", "گ", "ل", "م", "ن", "و", "ه", "ی", "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"
];
var testArrray = ["ی", "گ", "ژ", "پ"];
var aChar;
var bChar;
function OrderFunc() {
testArrray.sort(function(a, b) {
return CharCompare(a, b, 0);
});
document.getElementById("result").innerHTML = testArrray;;
}
function CharCompare(a, b, index) {
if (index == a.length || index == b.length)
return 0;
aChar = alphabets.indexOf(a.toUpperCase().charAt(index));
bChar = alphabets.indexOf(b.toUpperCase().charAt(index));
if (aChar != bChar)
return aChar - bChar
else
return CharCompare(a, b, index + 1)
}
<html>
<head></head>
<body onload="OrderFunc()">
<div id="result"></div>
<ul class="myul">
<li>ی</li>
<li>پ</li>
<li>گ</li>
<li>ژ</li>
</ul>
</body>
</html>
7条答案
按热度按时间7kjnsjlb1#
String#localeCompare
应该能够识别区域设置并适当地比较字符串,因此:示例:
x一个一个一个一个x一个一个二个x
您可能需要将一些选项传递给
localeCompare
,请参阅ECMAScript®国际化API规范了解更多信息。你在评论中问:
我会做什么第一波斯语和第二英语单词?
如果你想知道在列表中如何将波斯语单词排在英语单词之前,我想你可能需要检测文本是用什么脚本写的。你应该可以用JavaScript正则表达式来做这件事,但是这个特性(Unicode属性替换)是新的,还没有得到很好的支持。不过你可以用XRegExp library来做这件事:
示例:
ufj5ltwl2#
为了在Persion中按字母顺序对列表进行排序,我在
<meta charset="utf-8">
中使用了以下代码,其结果非常完美:Intl.Collator对象启用区分语言的字符串比较。
对于其他语言,可以将fa:
有关详细信息,请访问https://dev.to/aumayeung/comparing-non-english-strings-with-javascript-collators-57bf和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator
s1ag04yj3#
我从来没有测试过它,也真的做不到,因为我不知道在阿拉伯语中哪个字母在前面或后面,但我可以为您指出正确的方向。您需要以类似于以下的方式使用localeCompare:
ar-ma
是Arabian摩洛哥语言代码,您应该根据需要更改为语言代码。gab6jxml4#
我有同样的问题,我写了这个函数,它很适合我..所以我决定在这里分享给你:
pjngdqdw5#
Crowder给出了正确的答案。但是如果你想自己动手,你可以应用你的定制排序函数,它通过比较引用数组中的索引来排序。
xu3bshqb6#
vulvrdjw7#
这是我的最佳解决方案: