这是Array.sort()中的错误吗?

Pit*_*rou 4 javascript sorting

这很难相信,但这看起来像谷歌Chrome的Javascript引擎中的一个错误.我错过了什么吗?

Chrome Javascript控制台会话:

> x = [10, 1]
> x.sort()
[1, 10]
> // OK.  But now try this.
> x = [10, 2]
> x.sort()
[10, 2]
Run Code Online (Sandbox Code Playgroud)

它没有排序!

我目前正在运行版本24.0.1312.57 m

Uoo*_*ooo 10

array.sort()按字典顺序对数组进行排序.这意味着,数组的值被解释为字符串并像字符串一样排序(按字母顺序排列),而不是整数.

此行为也在此处描述:http://www.javascriptkit.com/javatutors/arraysort.shtml


Ale*_*exM 7

对于那些来到这里搞清楚在Chrome中排序有什么问题的人unstable sort来说,这是一个例子:https://jsfiddle.net/wujpw8bo/

如何解决:

可以特别实现不稳定的排序算法以保持稳定.这样做的一种方法是人为地扩展密钥比较,以便使用原始输入列表中的条目的顺序作为打破平局来确定具有其他相等密钥的两个对象之间的比较.但是,记住这个顺序可能需要额外的时间和空间. https://en.wikipedia.org/wiki/Sorting_algorithm#Stability