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

Ole*_*Ole 12 javascript sorting

W3CSchools具有以下示例:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Run Code Online (Sandbox Code Playgroud)

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

更新资料

答案之一是使用localeCompare。只是好奇我们是否这样做reverse(),是否可以在所有地区使用(也许这是一个单独的问题-请在评论中让我知道)?

col*_*lxi 19

如果你考虑

obj.sort().reverse();
Run Code Online (Sandbox Code Playgroud)

VS

obj.sort((a, b) => (a > b ? -1 : 1))
Run Code Online (Sandbox Code Playgroud)

VS

obj.sort((a, b) => b.localeCompare(a) )
Run Code Online (Sandbox Code Playgroud)

表现优胜者是:obj.sort().reverse()

使用10.000个元素组成的数组进行测试, obj.sort().reverse()obj.sort( function ),和obj.sort( function )(使用localCompare)快约100倍

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

  • [`(a,b)=>(a> b?-1:1)`还不够](/sf/answers/1462485671/) (2认同)
  • `obj.sort((a, b) => b - a)` 仅适用于数字,不适用于字符串! (2认同)

Eme*_*eus 8

如果您想对小写和大写字符串进行排序,则使用 justsortreverse a>是错误的:Z

\n\n

\r\n
\r\n
var arr = ["a","b","c","A","B","Z"];\r\n\r\narr.sort().reverse();\r\n\r\nconsole.log(arr)//<-- [ \'c\', \'b\', \'a\', \'Z\', \'B\', \'A\' ] wrong!!!
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

英文字符

\n\n

\r\n
\r\n
var arr = ["a","b","c","A","B","Z"];\r\n\r\narr.sort((a,b)=>b.localeCompare(a))\r\n\r\nconsole.log(arr)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

使用locales 的特殊字符,在此示例中为 es (西班牙语)

\n\n

\r\n
\r\n
var arr = ["a", "\xc3\xa1", "b","c","A","\xc3\x81","B","Z"];\r\n\r\narr.sort((a, b) => b.localeCompare(a, \'es\', {sensitivity: \'base\'}))\r\n\r\n\r\nconsole.log(arr)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

在这种情况下的敏感性是基础

\n\n
\n

只有基本字母不同的字符串才会被视为不相等。示例:\na \xe2\x89\xa0 b、a = \xc3\xa1、a = A。

\n
\n

  • 是什么让你认为这是错误的?OP要求进行降序排序,而不是使其不区分大小写。 (2认同)
  • @Bergi 使用“sort”和“reverse”可以解决OP使用该特定数据集所面临的问题,但在我看来,它作为通用解决方案并不好。另外OP在标题中说的是“字符串”,而不是某种字符串。无论哪种方式,“是错误的”都是一个糟糕的概括。 (2认同)