Javascript 按字母顺序对列表进行排序,并在末尾添加字符
我需要按角度、字母顺序(升序)对列表进行排序,但如果项目的前缀有特殊字符,则希望将其推送到列表的末尾。 例如:列表应如下所示:Javascript 按字母顺序对列表进行排序,并在末尾添加字符,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我需要按角度、字母顺序(升序)对列表进行排序,但如果项目的前缀有特殊字符,则希望将其推送到列表的末尾。 例如:列表应如下所示: Apple Banana *Apple 任何建议都会被推荐。这可能是不正确的,但这是我现在能想到的最好的建议 var数组=[“苹果”、“香蕉”、“苹果”]; //拆分包含和不包含特殊字符的数组 var字母数字=数组.过滤器(函数(val){ 返回!(/[~`!\$%\^&*+=\-\[\]\\',/{}\\\\\\“:\?]/g.test(val)); }); va
Apple
Banana
*Apple
任何建议都会被推荐。这可能是不正确的,但这是我现在能想到的最好的建议
var数组=[“苹果”、“香蕉”、“苹果”];
//拆分包含和不包含特殊字符的数组
var字母数字=数组.过滤器(函数(val){
返回!(/[~`!\$%\^&*+=\-\[\]\\',/{}\\\\\\“:\?]/g.test(val));
});
var specialChars=array.filter(函数(val){
返回/[~`!\$%\^&*+=\-\[\]\\',/{}\\\\\\“:\?]/g.test(val);
});
控制台日志(字母数字、特殊字符);
//分别对它们进行排序
字母数字。sort();
specialChars.sort();
//将它们重新组合在一起,然后再将特殊角色组合在一起
var两者=字母数字.concat(特殊字符);
console.log(两个);
var list=[“苹果”、“橘子”、“香蕉”、“香蕉”、“苹果”];
正则表达式=/^[A-z]+$/;
dummyArray1=[];
dummyArray2=[];
对于(变量i=0;i
一行:
var-sorted=[“香蕉”、“苹果”、“卡纳纳”、“黑莓”、“香蕉”、“香蕉”、“苹果”]
.sort(函数(a、b、r){
返回r=/^[a-z]/i,(r.test(a)?a:“z”+a)>(r.test(b)?b:“z”+b)
});
//试验
document.write(已排序的.join(“
”)代码>这里有一个相当简单的解决方案。手动比较字符串时,最好使用正确排序的字符串,即使用户的特定语言环境指定了不同的排序顺序。但单靠这个功能并不能解决我们的问题。在@wZVanG的巧妙答案的基础上,我们将使用\W
regex字符组,将字符串开头的任何非单词字符替换为字母z
,这将自动将它们排序到列表的末尾
请注意,其中的一个缺陷是,如果您的任何单词以多个z
开头,它们将在特殊字符后排序。一个简单的解决方法是在字符串中添加更多的z
s,如返回A.replace(/^\W+/,'zzz').localeCompare(b.replace(/^\W+/,'zzz')
)
可能的重复不是重复,但也不太远…只需使用sort()
回调函数,并在以特殊字符开头的字符串上添加z
,检查我的答案。@AndyRay thnxx获得令人惊奇的解决方案:)就行了。。虽然不是理想的,但对我来说是这样的,thx:)注意\W
也会带下划线\uu
,并且会作为\u苹果、香蕉、*Apple
订购。您可能想/^[^a-z]+/i
我在用python而不是java对列表排序时遇到了类似的问题。将@AndyRay提供的解决方案改编成python语法解决了我的问题。
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 array = ["Banana", "Apple", "*Canana", "Blackberry", "Banana", "*Banana", "*Apple"];
array.sort(function(a,b) {
return a.replace(/^\W+/, 'z').localeCompare(b.replace(/^\W+/, 'z'));
});