JavaScript按照对象的某个属性进行排序

JavaScript按照对象的某个属性进行排序

1、背景

在使用Echart绘制地图专题图时,左侧的visualMap控件需要min和max两个参数,要求低的话可以默认设置0-max(这里为固定预设最大值),要求高的话,就要根据查询结果提取最值,然后在动态设置visualMap的min和max值。

Echarts:http://echarts.baidu.com/demo.html#map-china-dataRange
这里写图片描述

2、JavaScript数组排序

我的绘图数据很简单,从sqlite数据库查询每个省份洪涝次数,绘图数据如下:

floodArray= [
                {name: '北京',value: 5 },
                {name: '天津',value: 6 },
                {name: '上海',value: 7 },
                {name: '重庆',value: 8 },
                {name: '河北',value: 9 },
                {name: '安徽',value: 54},
                {name: '新疆',value: 12},
                {name: '浙江',value: 2 },
                {name: '江西',value: 5}

            ]

我的目标是提取数组中对象的value最大值与最小值,当然一种方式是提取所有对象value值放入一个数组,然后对这个数组进行排序获取最大值与最小值。我们在利用Excel排序是,往往都会有一个选项——是否扩展排序,也就是包含排序选项的对象是否也按排序值进行相应的排序。也就是我们现在要解决的这个问题。

2.1、创建比较函数

function createCompareFunction(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;
        }
    }
}

这里,我们创建了一个创建比较函数的函数(有点拗口,其实是闭包,闭包就不多介绍了),createCompareFunction根据要排序的propertyName返回一个匿名比较函数,这个匿名函数可以作为sort()函数的参数。

2.2、排序

JavaScript的array提供了sort排序方法,sort()可以接收一个比较函数作为参数。

  floodArray.sort(createCompareFunction("value"));

floodArray即为按照升序排列后的数组。

var min = floodArray[0].value;
var max = floodArray[floodArray.length-1].value;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值