sort

JavaScript 的 Array 的 sort() 方法就是用于排序的,但是排序结果可能让你大吃一惊:

[10, 20, 1, 2].sort(); // [1, 10, 2, 20]

这是因为 Array 的 sort() 方法默认把所有元素先转换为 String 再排序,结果 '10' 排在了 '2' 的前面,因为字符 '1' 比字符 '2' 的 ASCII 码小。

sort() 方法也是一个高阶函数,可以接收一个比较函数来实现自定义的排序。要按数字大小排序,我们可以这么写:

var arr = [10, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return -1;  
    }
    if (x > y) {
        return 1;
    }
    return 0;
});  

// [2, 10]

javascript 规定,对于两个元素 x 和 y,如果认为 x < y,则返回 -1,如果认为 x == y,则返回 0,如果认为 x > y,则返回 1。 也就是说,返回结果为 -1 时,sort() 方法会把 x 排在 y 前面,返回结果 1 时,会把 y 排在 x 前面。

在上诉函数的一次比较中,因为 10>2 ,返回的结果为 1,所以 2 会排在 10 前面。

修改一下函数,实现倒序排序:

var arr = [10, 2, 1, 20];
arr.sort(function (x, y) {
    if (x < y) {
        return 1;
    }
    if (x > y) {
        return -1;
    }
    return 0;
});

// [20, 10, 2, 1]

你可能感兴趣的:(sort)