sort()
方法默认排序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。
比如:
[3, 15, 8, 29, 102, 22].sort();
结果为:
[102, 15, 22, 29, 3, 8]
这样用起来自然是不方便,因此,sort()
函数允许我们传入一个比较函数作为参数,用来定义哪个值在哪个值的前面。
比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回 0,如果第一个参数应该位于第二个之后则返回一个正数。
下面就是一个简单的升序比较函数:
function compareFun(v1, v2) {
if (v1 < v2) {
return -1;
} else if (v1 > v2) {
return 1;
} else {
return 0;
}
}
降序比较函数只需更改返回值即可:
function compareFun(v1, v2) {
if (v1 < v2) {
return 1;
} else if (v1 > v2) {
return -1;
} else {
return 0;
}
}
sort()
函数的返回值是排序后的数组。不过要注意的是,数组本身已经排序,并且不进行复制
let arr = [3, 15, 8, 29, 102, 22];
console.log(arr.sort()); //(6) [102, 15, 22, 29, 3, 8]
console.log(arr); //(6) [102, 15, 22, 29, 3, 8]
console.log(arr.sort(compareFun)); //[3, 8, 15, 22, 29, 102]
console.log(arr); //[3, 8, 15, 22, 29, 102]
function compareFun(v1, v2) {
if (v1 < v2) {
return -1;
} else if (v1 > v2) {
return 1;
} else {
return 0;
}
}