很难相信,但这看起来像谷歌Chrome的Javascript引擎中的一个错误。我错过了什么吗?
Chrome Javascript控制台会话:
> x = [10, 1]
> x.sort()
[1, 10]
> // OK. But now try this.
> x = [10, 2]
> x.sort()
[10, 2]
它没有排序!
我目前正在运行版本24.0.1312.57 m
答案 0 :(得分:8)
array.sort()
按字典顺序对数组进行排序。这意味着,数组的值被解释为字符串,并像字符串一样排序(按字母顺序排列),而不是整数。
此处还描述了此行为:http://www.javascriptkit.com/javatutors/arraysort.shtml
答案 1 :(得分:6)
对于那些来到这里查明在Chrome中排序有什么问题的人来说,这是<div>
<h1>My pic </h1>
<?php echo "<img src='https://graph.facebook.com/481032075371655/picture'>";?>
</div>
的一个示例:https://jsfiddle.net/wujpw8bo/
如何修复它:
可以特别实施不稳定的排序算法以保持稳定。这样做的一种方式是人为地扩展密钥比较,以便使用原始输入列表中的条目的顺序作为打破平局来确定具有其他相等密钥的两个对象之间的比较。但是,记住这个顺序可能需要额外的时间和空间。 https://en.wikipedia.org/wiki/Sorting_algorithm#Stability
答案 2 :(得分:0)
您应该使用以下方法:
abc =[10,2,4,1]; abc.sort(function( a , b ){
return a-b;
});
答案 3 :(得分:-1)
您在第二个 sort()
上缺少括号x.sort()
修改强> 只是自己尝试过,即使用括号也不行。
检查这些问题。也许他们会解决你的问题。
Sorting an array of objects in Chrome
Sorting Javascript Array with Chrome?
<强> EDIT2:强> 这按预期工作:
var x;
x = [10, 2];
alert(x); // returns 10, 2
x.sort ( function( a , b ){
return a-b;
});
alert(x); // returns 2,10