按字母顺序对列表排序,末尾为字符

Sort a list alphabetically with characters at the end

本文关键字:字符 排序 列表 顺序      更新时间:2023-09-26

我需要按角排序列表,按字母顺序排序(升序),但希望特殊字符,如果有任何前缀到一个项目被推到列表的末尾。例如:列表应该是这样的:

Apple
Banana
*Apple

这里有一个相当简单的解决方案。当手动比较字符串时,最好使用localeCompare,即使用户的语言特定区域指定了不同的排序顺序,它也会正确排序。但是这个函数本身并不能解决问题。在@wZVanG的聪明答案的基础上,我们将使用'W regex字符组替换字符串开头的任何非单词字符,并使用字母z将它们自动排序到列表的末尾。

注意其中的一个缺陷是,如果任何单词以多于一个z开头,它们将在特殊字符之后排序。一个简单的解决方法是向字符串中添加更多的z s,如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'));
});

这可能不正确,但这是目前我能想到的最好的办法。

var array = ["Apple", "Banana", "*Apple"];
// Split the arrays with and without special chars
var alphaNumeric = array.filter(function (val) {
    return !(/[~`!#$%'^&*+='-'[']''';,/{}|''":<>'?]/g.test(val));
});
var specialChars = array.filter(function (val) {
    return /[~`!#$%'^&*+='-'[']''';,/{}|''":<>'?]/g.test(val);
});
console.log(alphaNumeric, specialChars);
// Sort them individually
alphaNumeric.sort();
specialChars.sort();
// Bring them back together but put the special characters one afterwards
var both = alphaNumeric.concat(specialChars);
console.log(both);
var list = ["Apple","Orange", "Banana", "*Banana","*Apple"];
regex= /^[A-z]+$/;
dummyArray1=[];
dummyArray2=[];
for(var i =0;i< list.length; i++){
    if(regex.test(list[i][0])){
    dummyArray1.push(list[i]);
    }
    else{
    dummyArray2.push(list[i]);
    }
}
console.log(dummyArray1.sort());
console.log(dummyArray2.sort());
console.log(dummyArray1.concat(dummyArray2));

一行:

var sorted = ["Banana", "Apple", "*Canana", "Blackberry", "/Banana", "*Banana", "*Apple"]
.sort(function(a, b, r){
   return r = /^[a-z]/i, (r.test(a) ? a : "z" + a) > (r.test(b) ? b : "z" + b)
});
//Test
document.write(sorted.join("<br />"));

如果条目不是以字母开头,则添加Z