JavaScript根据某个对象属性对数组进行排序

面试算法题解题思路中的某个步骤,当时有点懵,没做出来。

需求:对一个数组进行排序,这个数组的元素是对象。举例:


// 根据年龄从小到大对数据进行排序
const person = [
    {name:"jack", age:21},
    {name:"rose", age:17},
    {name:"mike", age:23},
    {name:"jonny", age:9}
];

 

首先了解一下数组函数sort的用法,可以设计一个比较函数,作为参数传递给sort函数,以此来设置元素排序顺序,如下举例:

// 对下列数值数组进行升序排序

function compare(v1, v2) {
    if (v1 < v2) return -1;
    else if (v1 > v2) return 1;
    else return 0;
}

const array = [1,7,8,2,3];

console.log(array.sort(compare)); // 输出: [ 1, 2, 3, 7, 8 ]

然后已知在JavaScript中,函数可以作为参数传递给另一个函数,也可以作为一个函数的返回值。

 

解题思路:定义一个函数,此函数接收一个属性名,根据此属性名创建一个比较函数作为返回值。该函数作为参数传递给sort函数。

 

代码实现

// 根据每个人的年龄,升序排序数组person

const person = [
    {name:"jack", age:21},
    {name:"rose", age:17},
    {name:"mike", age:23},
    {name:"jonny", age:9}
];

function objectSort(age) {
    // 比较函数通过age属性获得对象的年龄进行比较
    // 比较函数作为函数返回值返回给sort
    return function (obj1, obj2) { 
        if (obj1[age] < obj2[age]) return -1;
        else if (obj[1] > obj2[age]) return 1;
        else return 0;
    }
}

person.sort(objectSort("age")); // 传递对象属性名称

console.log(person);

当然比较函数可以简化一下,写作:

function objectSort(age) {
    // 比较函数通过age属性获得对象的年龄进行比较
    // 比较函数作为函数返回值返回给sort
    return function (obj1, obj2) { 
        return obj1[age] - obj2[age];
    }
}

 

你可能感兴趣的:(Web)