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];
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值