没有合适的资源?快使用搜索试试~ 我知道了~
引子 在以数据为中心的信息系统中,以表格形式展示数据是在常见不过的方式了。对数据进行排序是必不可少的功能。排序可以分为按单个字段排序和按多个字段不同排序方向排序。单字段排序局限性较大,不能满足用户对数据的关注点变化的需求,而多字段排序就可以较好的弥补这个缺陷。 多字段排序,实现的方式从大的层面上可以分为后端实现和前端实现。 后端排序 后端实现排序可以在数据库层面实现或者在应用程序层面实现。 数据库层面实现多字段排序非常简单,使用SQL的排序指令“Order By”即可——Order By field1 asc, field2 desc, field3 asc — …。 应用程序层面是指Web应
资源推荐
资源详情
资源评论
JavaScript对象数组如何按指定属性和排序方向进行排序对象数组如何按指定属性和排序方向进行排序
引子引子
在以数据为中心的信息系统中,以表格形式展示数据是在常见不过的方式了。对数据进行排序是必不可少的功能。排序可以分
为按单个字段排序和按多个字段不同排序方向排序。单字段排序局限性较大,不能满足用户对数据的关注点变化的需求,而多
字段排序就可以较好的弥补这个缺陷。
多字段排序,实现的方式从大的层面上可以分为后端实现和前端实现。
后端排序后端排序
后端实现排序可以在数据库层面实现或者在应用程序层面实现。
数据库层面实现多字段排序非常简单,使用SQL的排序指令“Order By”即可——Order By field1 asc, field2 desc, field3 asc —
…。
应用程序层面是指Web应用层(这里不讨论C/S架构),比如PHP、Java Web、ASP.NET等。应用程序层面实现就是使用
PHP、Java、.NET(C#/VB)这些后端服务语言来实现对数据的排序。以ASP.NET C# 为例,因为C#中的LINQ内置了对集合
类型的诸多操作,并且支持多属性排序,所以使用LINQ能够很方便的实现此目的——from f in foos orderby f.Name
descending, f.Num ascending select f(可以发现LINQ的排序语法几乎与SQL的一模一样)。如果其它语言没有内置类似的支
持,则按照排序算法来实现,这是通用的,与编程语言无关。
前端排序前端排序
在JavaScript中,数组有一个排序方法“sort”,当数组是一个简单数组(数组元素是简单类型——字符串、数值和布尔)时,使
用该方法可以很方便的到达排序目的。但是当数组元素是非简单类型,比如名/值对的Object,并且想要按照指定的某几个属
性按不同的排序方向进行排序时,简单的调用“sort”方法就不能实现此目的了。
不过好在“sort”方法预留了自定义排序的接口,可以实现想要的排序方式。
来看看数组的“sort”方法是怎样的。
sort函数原型函数原型
// 对数组的元素做原地的排序,并返回这个数组。
// 默认按照字符串的Unicode码位点(code point)排序。
Array.prototype.sort([compareFunction]:number); // number:-1 | 0 | 1。
// 典型的比较函数(升序排序)。
function compareFunction(item1, item2) {
if(item1 > item2) {
return 1; // 如果是降序排序,返回-1。
}else if(item1 === item2) {
return 0;
}else {
return -1; // 如果是降序排序,返回1。
}
}
说明:如果没有指明compareFunction,那么元素会被转换为字符串的诸个字符并按照Unicode位点顺序排序。例
如,”Cherry”会被排列到”banana”之前。当对数字进行排序的时候, 9 会出现在 80 之前,因为他们会先被转换为字符串,而
“80” 比 “9” 要靠前。
•如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
•如果 compareFunction(a, b) 等于 0 ,a 和 b
的相对位置不变。备注:ECMAScript标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003
年之前的版本);
•如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
•compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
注:以上规则得出的排序结果是升序的,如果想要得到降序的结果,则在比较结果大于 0 时返回小于 0 的结果,比较结果小
于 0 时 返回大于 0 的结果即可。
要实现多属性排序,关键就在于比较函数的实现。根据以上规则, 实现多属性不同方向排序,依然要返回两个比较项的大小
关系。
那么多属性对象的大小关系如何确定呢?这个可以分两步走。那么多属性对象的大小关系如何确定呢?这个可以分两步走。
第一步,记录下两个排序项按照各个排序属性及方向进行比较得到的结果。
资源评论
weixin_38537968
- 粉丝: 6
- 资源: 975
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功