Javascript中数组的sort()方法

最近的项目开发中用到了数组的排序,想着将平时遇到的问题整理下来,算是一种积累,闲话少叙,开始正题:
sort() 方法用于对数组元素进行排序,并返回数组,默认排序是根据字符串的Unicode码点
语法:arrayObject.sort(sortby),其中sortby可选,规定数组排序顺序,必须是函数
注:如果调用该方法时没有使用参数,将按照字母顺序对数组中的
元素进行排序,说的更精确一些,是按照字符编码的顺序进行排序,要实现这一点,首先应该把数组的元素都转换成字符串,以便进行比较。

如果想要按照其它的标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字,比较函数应该具有两个参数a,b 其返回值如下:
(1)若a小于b ,在排序后的数组中a 应该出现在b之前,则返回一个小于0的值
(2)若a等于b,则返回0
(3)若a大于b,则返回一个大于0的值
1、我们举一个栗子~~~:

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "
") document.write(arr.sort())

输出:

George,John,Thomas,James,Adrew,Martin
Adrew,George,James,John,Martin,Thomas

2、我们再举一个栗子~~~:

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "
") document.write(arr.sort())

输出:

10,5,40,25,1000,1

请注意,上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:

function sortNumber(a, b) {
    console.log(a);
    console.log(b);
    return a - b
}

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "
") document.write(arr.sort(sortNumber))

这里可以看出,如果按照升序排列,那么方法为:

function sortNumber(a, b) {
    return a - b
}

如果是按照降序排列则为:

function sortNumber(a, b) {
    return b - a
}

当然如果想根据数组对象中的某个属性值进行排序呢?
sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,
其他部分代码与正常使用sort方法相同。

var arr = [
    { name: 'zopp', age: 0 },
    { name: 'gpp', age: 18 },
    { name: 'yjj', age: 8 }
];

function compare(property) {
    return function(a, b) {
        var value1 = a[property];
        var value2 = b[property];
        return value1 - value2;
    }
}
console.log(JSON.stringify(arr.sort(compare('age'))))

输出:

[{"name":"zopp","age":0},{"name":"yjj","age":8},{"name":"gpp","age":18}]

如何根据参数不同,来确定是升序排列,还是降序排序呢?

var sortBy = function(attr, rev) {
    //第二个参数没有传递 默认升序排列
    if (rev == undefined) {
        rev = 1;
    } else {
        rev = (rev) ? 1 : -1;
    }
    return function(a, b) {
        a = a[attr];
        b = b[attr];
        if (a < b) {
            return rev * -1;
        }
        if (a > b) {
            return rev * 1;
        }
        return 0;
    }
}

使用方式:

newArray.sort(sortBy('number', false))

你可能感兴趣的:(Javascript中数组的sort()方法)