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;
}
}
Array.sort()方法默认通过比较元素的UTF-16代码单元值序列进行排序,这可能导致非预期结果。可以传入自定义比较函数来指定排序规则,如升序或降序。例如,升序比较函数会返回负数、0或正数,以确定元素顺序。降序比较函数只需调整返回值。排序操作直接在原数组上进行,不会创建新的副本。

被折叠的 条评论
为什么被折叠?



