zoukankan      html  css  js  c++  java
  • 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来获取更多的参数,用以传入更多的字段作为判断条件。

    参考原文:https://www.tangshuang.net/2406.html

    
    


  • 相关阅读:
    Exchange 2013与 Office Web Apps 整合
    SharePoint2013 以其他用户登录和修改AD域用户密码 功能
    sharepoint 2010 自定义页面布局
    sharepoint 2010 记录管理 对象模型
    SharePoint2010 对象模型 关联列表
    在SharePoint Server 2010中更改“我的网站”
    xenapp 6.5 客户端插件第一次安装总是跳到官网
    如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
    在Win7 Hyper-v虚拟机中挂接真实机的声卡
    win8 中如何删除 共享文件夹 用户名和密码
  • 原文地址:https://www.cnblogs.com/iamlhr/p/11459653.html
Copyright © 2011-2022 走看看