js将数组对象中按照对象的某一个属性进行排序

sort方法有两个注意点:
会操作原始数组,经过操作后原始数组发生变化
默认排序按照字符编码排序

例如,我们有下面的一个例子:

var arr1 = [14,23,11,6,87,67];
arr1.sort();// [11,14,23,6,67,87] 按字符而非数值排序

想要完成值比较排序,必须传入sort参数(函数)进行规制制定:

function sortRule(a,b) {
  return a-b; // 如果a>=b,返回自然数,不用交换位置
}
arr1.sort(sortRule);

但是,如果遇到每个元素并非是数值,而是对象,那应该怎么去处理呢?其实道理是一样的,只不过我们要在规制函数中重新编写一个适合对象的规制:

function sortBy(props) {
    return function(a,b) {
        return a[props] - b[props];
    }
}
var arr = [{ name: "a", age: 10 }, { name: "a", age: 12 }, { name: "a", age: 11 }];
arr.sort(sortBy("age"));

在这种想法下面,我们还可以做一个设想:假如value相等的情况下,我们是否可以其他属性的大小排序输出?

function sortBy(field1,field2) {
    return function(a,b) {
        if(a.field1 == b.field1) return a.field2 - b.field2;
        return a.field1 - b.field1;
    }
}
arr1.sort(sortBy("value","score"));

原文地址:https://blog.csdn.net/qq_32971359/article/details/108616921

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值