我在尝试对JavaScript数组进行排序时遇到了奇怪的行为。
在这种情况下,它正常工作,将相同的数组返回给我。
控制台显示如下:
给我这个。 我不太明白为什么会发生这种情况。
附注:我正在编写自定义排序,检查元素的长度,因为我需要一个根据长度排序其元素的数组。
var arr = ['a', 'b', 'C', 'd', 'e', 'f', 'g', 'h', 'I', 'k'];
arr.sort(function (a, b) {
console.log(a, b);
if (a.length < b.length) return 1;
else if (a.length > b.length) return -1;
else return 0;
});
但是当我尝试使用以下输入时,
var arr = ['a', 'b', 'C', 'd', 'e', 'f', 'g', 'h', 'I', 'k', 'l'];
给我这个。 我不太明白为什么会发生这种情况。
附注:我正在编写自定义排序,检查元素的长度,因为我需要一个根据长度排序其元素的数组。
return a.length - b.length
- IsaacArray.prototype.sort()
第二项中指出:如果compareFunction(a, b)
返回 0,则相对于所有不同的元素,保持 a 和 b 不变,但已排序。注意:ECMAscript 标准不保证此行为,因此并非所有浏览器(例如至少可以追溯到 2003 年的 Mozilla 版本)都支持此行为。 因此,与 Chrome 或 Opera 不同,如果在 Firefox 中尝试您的示例,则会返回相同的数组。 - Redu