JavaScript对象数组排序实例方法浅析


Posted in Javascript onJune 15, 2016

 在javascript中实现多维数组、对象数组排序,基本上都是用原生的sort()方法,用于对数组的元素进行排序。

其基本的用法就不说了,先看个简单的排序例子:

//Sort
alphabetically and ascending:
var
myarray=["Bob",
"Bully",
"Amy"]
myarray.sort()
//Array
now becomes ["Amy", "Bob", "Bully"]

数组直接调用sort()后,数组按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。

再来看看数字的排序:

//Sort
numerically and ascending:
var
myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){return
a - b}) //Array
now becomes [7, 8, 25, 41]

sort(fun)接受了个排序规则函数,这个函数将比较2个数字的大小。而我们的对象数组排序,实际上原理也是一样的。

对于对象数组排序,我们先写一个构造比较函数的函数:

//by函数接受一个成员名字符串做为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
var
by = function(name){
return
function(o,
p){
var
a, b;
if
(typeof
o === "object"
&& typeof
p === "object"
&& o && p) {
a
= o[name];
b
= p[name];
if
(a === b) {
return
0;
}
if
(typeof
a === typeof
b) {
return
a < b ? -1 : 1;
}
return
typeof 
a < typeof
b ? -1 : 1;
}
else
{
throw
("error");
}
}
}

要排序的数组:

var
employees=[]
employees[0]={name:"George",
age:32, retiredate:"March
12, 2014"}
employees[1]={name:"Edward",
age:17, retiredate:"June
2, 2023"}
employees[2]={name:"Christine",
age:58, retiredate:"December
20, 2036"}
employees[3]={name:"Sarah",
age:62, retiredate:"April
30, 2020"}

直接调用函数:

employees.sort(by("age"));

到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对age排序,如果age相同,再比较name。
这时,我们可以进一步修改by函数,让其可以接受第二个参数,当主要的键值产生一个匹配的时候,另一个compare方法将被调用以决出高下。

//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age]
和 p[age] 相等时,次要比较函数被用来决出高下
var
by = function(name,minor){
return
function(o,p){
var
a,b;
if(o
&& p && typeof
o === 'object'
&& typeof
p ==='object'){
a
= o[name];
b
= p[name];
if(a
=== b){
return
typeof 
minor === 'function'
? minor(o,p):0;
}
if(typeof
a === typeof
b){
return
a <b ? -1:1;
}
return
typeof 
a < typeof
b ? -1 : 1;
}else{
thro("error");
}
}
}
employees.sort(by('age',by('name')));

好了,现在可以放心使用了。如果看不懂,可直接copy 这个by函数到你的应用里面,直接调用即可。

以上所述是小编给大家介绍的JavaScript对象数组排序实例方法浅析的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
dojo 之基础篇(三)之向服务器发送数据
Mar 24 Javascript
JS常用表单验证方法总结
May 22 Javascript
javascript函数特点实例分析
May 14 Javascript
javascript中一些util方法汇总
Jun 10 Javascript
jquery验证邮箱格式并显示提交按钮
Nov 07 Javascript
js事件处理程序跨浏览器解决方案
Mar 27 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
Aug 19 Javascript
vue.js 表格分页ajax 异步加载数据
Oct 18 Javascript
js css自定义分页效果
Feb 24 Javascript
微信小程序模板(template)使用详解
Jan 31 Javascript
vue项目引入字体.ttf的方法
Sep 28 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 #Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
Jun 15 #Javascript
jQuery动态加载css文件实现方法
Jun 15 #Javascript
异步加载JS、CSS代码(推荐)
Jun 15 #Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 #Javascript
漫谈JS引擎的运行机制 你应该知道什么
Jun 15 #Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 #Javascript
You might like
10个实用的PHP正则表达式汇总
2014/10/23 PHP
php数组键名技巧小结
2015/02/17 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
js实现GIF图片的分解和合成
2019/10/24 Javascript
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python类class参数self原理解析
2020/11/19 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
安全保证书
2015/01/16 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
开除通知书范本
2015/04/25 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript