按字母顺序对列表进行排序

时间:2015-08-07 03:40:43

标签: javascript jquery angularjs

我需要按角度,按字母顺序(升序)对列表进行排序,但是如果要在列表末尾按下某个项目的前缀,则需要特殊字符。 例如:列表应该是:

Apple
Banana
*Apple
建议任何建议。

4 个答案:

答案 0 :(得分:3)

这是一个相当简单的解决方案。在手动比较字符串时,使用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'));
});

答案 1 :(得分:2)

这可能不正确但是我能想到的最好的时刻。

DEMO

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

一行:

before

如果项目没有以字母开头,请添加class GuzzleProfiler implements SubscriberInterface { public function getEvents() { return [ 'before' => ['onBefore'], 'complete' => ['onComplete'] ]; } public function onBefore(BeforeEvent $event, $name) { start_profiling(); } public function onComplete(CompleteEvent $event, $name) { end_profiling(); } }