Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript数组排序中的奇怪行为_Javascript_Arrays_Sorting - Fatal编程技术网

JavaScript数组排序中的奇怪行为

JavaScript数组排序中的奇怪行为,javascript,arrays,sorting,Javascript,Arrays,Sorting,我在尝试对JavaScript数组排序时遇到了一个奇怪的行为 var arr=['a','b','C','d','e','f','g','h','I','k']; arr.sort(函数(a,b){ 控制台日志(a,b); 如果(a.lengthb.length)返回-1; 否则返回0; }); ECMAScript既不指定特定的算法,也不希望它是稳定的(Array.prototype.sort)。稳定的排序算法保持看似“相同”的元素的相对顺序。要进行数组#排序,当比较函数返回0时,两个项目显

我在尝试对JavaScript数组排序时遇到了一个奇怪的行为

var arr=['a','b','C','d','e','f','g','h','I','k'];
arr.sort(函数(a,b){
控制台日志(a,b);
如果(a.lengthb.length)返回-1;
否则返回0;
});
ECMAScript既不指定特定的算法,也不希望它是稳定的(
Array.prototype.sort
)。稳定的排序算法保持看似“相同”的元素的相对顺序。要进行数组#排序,当比较函数返回0时,两个项目显示相同。虽然InsertionSort和MergeSort(苹果和Mozilla)是稳定的,但QuickSort(谷歌Chrome)却不是(第90期)。如果数组包含10个或更少的元素,Chrome将使用InsertionSort对数组进行排序

因此,Safari和Firefox将排序
[“sed”、“dolor”、“ipsum”、“foo”、“bar”、“cat”、“sit”、“man”、“lorem”、“amet”、“maecenas”]
(按字符长度排序),“sed”将保留第一位,而Chrome将掷骰子,可能更喜欢“cat”来获得杆位。Chrome开发者显然喜欢小猫

因此,如果您发现自己有需要,可以自己实现一个稳定的算法,比如MergeSort


检查完整的帖子

尝试
返回a.length-b.length
另外,所有这些长度都将是1。。。尝试console.log()一些不起作用的变量。是的,我知道。都是1。因此,应该跳过它们并保持原样。在else返回0中处理的;您可能需要一个稳定的排序,比如JavaScript排序不能保证是稳定的,也就是说,如果自定义排序函数为两个元素返回0,那么引擎可以随意将它们按任意顺序排列。另外,请参见,并非所有浏览器都支持从排序方法返回
0
@JeremyJStarcher:你误解了文件。返回
0
是,所有浏览器都支持。并非所有浏览器都支持的只是稳定的行为;他们仍然会把相同的东西排在一起。