在Javascript中以降序对字符串进行排序(最有效)?

时间:2018-08-26 20:40:58

标签: javascript sorting

W3CSchools具有以下示例:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();

这是在JavaScript中按降序对字符串进行排序的最有效方法吗?

更新

答案之一是使用localeCompare。只是好奇我们是否执行reverse(),这对所有语言环境都有效(也许这是一个单独的问题-请在评论中让我知道)?

4 个答案:

答案 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倍)

此处的性能测试:https://jsperf.com/reverse-string-sort/1

答案 1 :(得分:1)

仅使用sortreverse 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)