Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按字母顺序对列表进行排序,并在末尾添加字符_Javascript_Jquery_Angularjs - Fatal编程技术网

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'));
});