对象数组通过对象的属性进行排序

项目中遇到了要给对象数组排序的问题,这时候就不能简单的使用sort()来解决了。

脚本之家这里找到了解决方法,代码贴在最下边了。

功能虽然靠复制粘贴实现了,还是得搞清楚原理:
首先,我们看一下JavaScript的sort()方法,这个方法其实是可以带参数的:

  • 当sort()方法不带参数的时候,将按照数字,字母(字符编码)的顺序进行排序。
  • 当sort()想要按照其他标准进行排序的时候,就需要传入参数。这个参数是一个比较函数

注意:这里的比较函数应该具有两个参数a和b。其返回值如下:

  • 若a小于b,在排序后的数组中a应该出现在b之前(即升序排列),则返回小于0的值
  • 若a等于b,则返回0
  • 若a大于b,则返回一个大于0的值

这样说比较绕,简单来理解就是:
比较函数要来比较a和b的大小,此时比较结果的3种情况要返回不同的值:

  • 当a小于b的时候,返回负数则升序排列;返回正数则降序排列
  • a大于b的时候返回值与其相反
  • a等于b的时候,返回0

代码如下:

//比较器
function compare(propertyName) { 
    return function (object1, object2) { 
        var value1 = object1[propertyName]; 
        var value2 = object2[propertyName]; 
        if (value1 < value2) { 
            return 1; 
        }else if (value1 > value2) { 
            return -1; 
        }else { 
            return 0; 
        } 
    };  
} 
//使用方法 
  data.sort(compare("name")); 

JavaScript对象根据属性值(中文)进行排序

上边是根据对象的属性值进行排序,但是有些情况下属性值是中文,比如姓名,省份。此时,结合localeCompare,可以把中文按照拼音首字母来排序。

//比较器
function compare(propertyName) { 
    return function (object1, object2) { 
        var value1 = object1[propertyName]; 
        var value2 = object2[propertyName]; 
        return value1.localeCompare(value2);
    };  
} 
//按照订单order中的姓名name的值进行排序
jdata.order.sort(compare("name"));

含有英文大小写的字符串,忽略大小写按字母排序

//取得储存的CC_email_list然后分开变成数组,并且排序
        var email_list = localStorage.getItem("assign_dc_email").split(";").sort(function(a,b){
            return a.toLowerCase().localeCompare(b.toLowerCase());
            });
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值