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 相关文章推荐
DOM下的节点属性和操作小结
May 14 Javascript
jQuery 性能优化指南(2)
May 21 Javascript
支持ie与FireFox的剪切板操作代码
Sep 28 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
Apr 12 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 Javascript
js实现顶部可折叠的菜单工具栏效果实例
May 09 Javascript
js实现select二级联动下拉菜单
Apr 17 Javascript
Bootstrap模态框调用功能实现方法
Sep 19 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
vue修饰符.capture和.self的区别
Apr 22 Vue.js
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
PHP4实际应用经验篇(6)
2006/10/09 PHP
利用 window_onload 实现select默认选择
2006/10/09 PHP
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
Python psutil模块简单使用实例
2015/04/28 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
python求前n个阶乘的和实例
2020/04/02 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
python中remove函数的踩坑记录
2021/01/04 Python
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
linux面试题参考答案(5)
2014/09/01 面试题
安全生产责任书范本
2014/04/15 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
2014年度安全工作总结
2014/12/04 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技