我需要按角度,按字母顺序(升序)对列表进行排序,但是如果要在列表末尾按下某个项目的前缀,则需要特殊字符。 例如:列表应该是:
Apple
Banana
*Apple
建议任何建议。
答案 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)
这可能不正确但是我能想到的最好的时刻。
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();
}
}
。