W3CSchools具有以下示例:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
这是在JavaScript中按降序对字符串进行排序的最有效方法吗?
答案之一是使用localeCompare
。只是好奇我们是否执行reverse()
,这对所有语言环境都有效(也许这是一个单独的问题-请在评论中让我知道)?
答案 0 :(得分:5)
如果您考虑
obj.sort().reverse();
VS
obj.sort((a, b) => (a > b ? -1 : 1))
VS
obj.sort((a, b) => b.localeCompare(a) )
性能优胜者是:obj.sort().reverse()
。
使用10.000个元素进行测试,
obj.sort().reverse()
的速度大约是obj.sort( function )
和obj.sort( function )
(使用localCompare
的100倍)
答案 1 :(得分:1)
仅使用sort
和reverse
a
> Z
,如果您要订购小写和大写字符串,那是错误的:
var arr = ["a","b","c","A","B","Z"];
arr.sort().reverse();
console.log(arr)//<-- [ 'c', 'b', 'a', 'Z', 'B', 'A' ] wrong!!!
英文字符
var arr = ["a","b","c","A","B","Z"];
arr.sort((a,b)=>b.localeCompare(a))
console.log(arr)
使用locales的特殊字符,在此示例中为es(西班牙语)
var arr = ["a", "á", "b","c","A","Á","B","Z"];
arr.sort((a, b) => b.localeCompare(a, 'es', {sensitivity: 'base'}))
console.log(arr)
在这种情况下,灵敏度为基本:
只有基本字母不同的字符串才被视为不相等。例子: a≠b,a =á,a = A。
答案 2 :(得分:0)
我知道这是一个古老的问题,但很有趣。这是我针对非特殊字符输入的解决方案。
var arr = ["a","b","c","A","B","Z"];
console.log(arr.sort((a,b)=> {
const lastCodeIn = b.toLowerCase().charCodeAt();
const lastCode = b.charCodeAt();
const firstCodeIn = a.toLowerCase().charCodeAt();
const firstCode = a.charCodeAt();
if(lastCodeIn - firstCodeIn === 0){
return lastCode - firstCode;
}
return lastCodeIn - firstCodeIn;
})
);//[ 'Z', 'c', 'b', 'B', 'a', 'A' ]
原因是大写字母的ASCII代码低于小写字母。
答案 3 :(得分:-1)
var arr = ["a","b","c","A","B","Z"];
arr.sort((a,b)=>b.localeCompare(a))
console.log(arr)