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

目录

一、总结

一句话总结:

js中的数组中的对象排序很简单,根据对象的属性指定排序规则即可,如果出问题就仔细检查一下中间数据

functon sortRule(a,b) {
    return a.value- b.value;
}

1、sort的排序函数中,规定属性进行排序?

可以在原数组排序函数的基础上再套一个函数来传字段参数,原排序函数作为这个函数的返回值返回

function sortBy(props) {
    return function(a,b) {
        return a[props] - b[props];
    }
}
arr1.sort(sortBy("value"));

2、字段1相等的时候,按照字段2的规则排序?

直接在规则中写字段1相等时字段2怎样,字段1不相等时怎样

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"));

回到顶部

二、JS中对于对象数组按照对象的某个属性进行排序

转自或参考:JS中对于对象数组按照对象的某个属性进行排序
https://www.cnblogs.com/iamlhr/p/11459653.html">JS中对于对象数组按照对象的某个属性进行排序

1.对象数组

我们现在有一组对象,包含“name,value”等属性,实现按照value对这些对象进行排序。

series:[
   {name:'西安市',value:100},
   {name:'威阳市',value:120},
   {name:'延安市',value:80},
   {name:'南洛市',value:90},
   {name:'榆林市',value:130}
]

2.排序方法

实际上在于数组对象的sort方法。

Array.sort(fun)

fun是一个函数,排序根据这个函数返回值来进行判断,如果返回值小于0表示两个元素不需要交换位置,1表示要用交互位置,0表示相等,实际上<=0等效。

sort方法有两个注意点:

  1. 会操作原始数组,经过操作后原始数组发生变化
  2. 默认排序按照字符编码排序,例如,我们有下面的一个例子:
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);

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

functon sortRule(a,b) {
    return a.value- b.value;
}

当然,这样写只使用对象的value属性,这是我们在明确知道要进行排序的对象数组的情况,倘若对象数组元素不存在value属性,那就会报错了,因此,你在撰写自己的规则时,应该适用其他属性规则判断。

假如我们现在不规定按照哪一个属性排序,比如除了value属性,我们还有其他的属性,希望能重复用这个算法,应该怎么办呢?

function sortBy(props) {
    return function(a,b) {
        return a[props] - b[props];
    }
}
arr1.sort(sortBy("value"));

没错,核心的代码就这么简单了。在这种想法下面,我们还可以做一个设想:假如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"));

没错,其实也就这么简单,甚至可以使用argments来获取更多的参数,用以传入更多的字段作为判断条件。

参考原文:javascript中对一个对象数组按照对象某个属性进行排序_唐霜的博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值