基础数组排序的误区
在 JavaScript 里,Array.prototype.sort() 是个常用方法,但它的默认行为经常让人踩坑。如果不传参数,元素会先转成字符串,再按 Unicode 码点排序。
var arr = ["a", "b", "A", "B"];
arr.sort();
console.log(arr); // ["A", "B", "a", "b"]
这是因为大写字母的编码值小于小写。如果是数字呢?
var arr = [15, 8, 25, 3];
arr.sort();
console.log(arr); // [15, 25, 3, 8]
看这结果,显然不是数值大小顺序。因为 15 变成了 "15",字典序里 "1" 排在 "3" 前面。这时候就得用上比较函数了。
比较函数接收两个参数 x 和 y。返回负数表示 x 在前,正数表示 y 在前,零则相等。
var arr = [23, 9, 4, 78, 3];
var compare = function (x, y) {
if (x < y) return -1;
else if (x > y) return 1;
else return 0;
}
console.log(arr.sort(compare)); // [3, 4, 9, 23, 78]

