我需要按 Angular 、字母顺序(升序)对列表进行排序,但希望将特殊字符(如果有的话)放在列表末尾。 例如:列表应该是这样的:
Apple
Banana
*Apple
任何建议都会被推荐。
最佳答案
这是一个相当简单的解决方案。手动比较字符串时,最好使用 localeCompare即使用户的特定语言环境规定了不同的排序顺序,它也能正确排序。但是单靠这个功能并不能解决我们的问题。基于@wZVanG 的聪明答案,我们将使用 \W
正则表达式字符组替换任何非单词字符,在字符串的开头用字母 z
这会自动将它们排序到列表的末尾。
请注意其中的一个缺陷是,如果您的任何单词以多个 z
开头,它们将排在特殊字符之后。一个简单的解决方法是向字符串添加更多 z
,如 return a.replace(/^\W+/, 'zzz').localeCompare(b.replace(/^\W+/, 'zzz')
.
var array = ["Banana", "Apple", "*Canana", "Blackberry", "Banana", "*Banana", "*Apple"];
array.sort(function(a,b) {
return a.replace(/^\W+/, 'z').localeCompare(b.replace(/^\W+/, 'z'));
});
关于javascript - 按字母顺序对列表进行排序,字符在末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31869328/