js数组对象重排序方法——sort()

由于在重新复习js的过程中,再一次接触到了js数组对象排序方法之一——sort(),先简单讲一下sort()方法的用法:
主要用于数组对象的排序,可以升序,也可以降序,但存在一个问题,如下代码:

var arr = [0, 3, 2, 16, 15, 10];
arr.sort();
console.log(arr); //[0, 10, 15, 16, 2, 3]

虽然该方法对数组进行了排序,但返回的数组却并不是按照数值大小进行的排序,因为sort()方法会调用每个数组元素的toString()转型方法将元素转化为字符串进行比较,而字符串比较的是ASCII码进行比较:

var a = '10';
var b = '15';
a.charCodeAt(); // Ascll 49
b.charCodeAt(); // Ascll 51
console.log(a < b); //true

所有这种情况并非最佳方案,这个时候就需要给sort()方法添加一个比较函数(compare),原理有点不太懂:

var arr = [0, 3, 2, 16, 15, 10];
function compare(a, b) {
    //a位于b之前
    if (a < b) {
        return -1; //升序返回-1 降序返回1
    } else if (a > b) {
        return 1;
    } else {
        return 0;
    }
}
arr.sort(compare); //升序
console.log(arr6); //[0, 2, 3, 10, 15, 16]
var arr = [0, 3, 2, 16, 15, 10];
function compare(a, b) {
    return a - b; //a-b 升序   b-a 降序
}
arr.sort(compare); //升序
console.log(arr6); //[0, 2, 3, 10, 15, 16]