js使用Array.prototype.sort()对数组对象排序的方法


Posted in Javascript onJanuary 28, 2015

本文实例讲述了js使用Array.prototype.sort()对数组对象排序的方法。分享给大家供大家参考。具体分析如下:

在讲对数组对象进行排序时,我们先来简单的了解一下Array.prototype.sort()。sort方法接受一个参数——Function,function会提供两个参数,分别是两个进行比较的元素,如果元素是String类型则通过Unicode code进行比较,如果是Number类型则比较值的大小。如果比较的函数中返回1则两个元素交换位置,0和-1不交换位置。先看一个例子:

var arr = [3, 5, 2, 1];

// 从小到大排序

arr.sort(function (a, b) {

    return a > b ? 1 : -1;

});

// 得到的结果:[1, 2, 3, 5]

那么回到我们的主题,如果是对一个数组对象进行排序,该怎么写呢?其实原理和上面一样,如:
var arr = [

    { a : 2, b : 3.2}, 

    { a : 3, b : 1.2}, 

    { a : 4, b : 2.2}, 

    { a : 6, b : 1.2}, 

    { a : 5, b : 3.2}

]

/// 从小到大按属性b排序

arr.sort(function(x, y){

    return x.b > y.b ? 1:-1;

});

x和y就是arr的一个元素,即一个对象,所以直接比较两个对象的属性即可。

上面的例子中,最小的元素中有重复,如果需求是:先按b属性从小到大排序,如果最小中有重复则再按a属性排序,那应该怎么写呢?

在排序的时候,先按b属性排序,如果x.b的大于y.b则将x移到y的右边,如果x.b等于y.b则再通过x.a和y.a进行比较,所以代码如下:

arr.sort(function (x, y) {

    if (x.b > y.b) {

        return 1;

    } else if (x.b === y.b) {

        return x.a > y.a ? 1 : -1;

    } else if (x.b < y.b) {

        return -1;

    }

})

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
音乐播放用的的几个函数
Sep 07 Javascript
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
May 03 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
如何解决Jquery库及其他库之间的$命名冲突
Sep 15 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
jQuery EasyUI Dialog拖不下来如何解决
Sep 28 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
手把手教你搭建ES6的开发运行环境
Jul 11 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
Vue基本指令实例图文讲解
Feb 25 Vue.js
js封装可使用的构造函数继承用法分析
Jan 28 #Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
Jan 28 #Javascript
javascript原型链继承用法实例分析
Jan 28 #Javascript
Jquery 实现图片轮换
Jan 28 #Javascript
javascript查询字符串参数的方法
Jan 28 #Javascript
Jquery 实现弹出层插件
Jan 28 #Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
Jan 28 #Javascript
You might like
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
在php中取得image按钮传递的name值
2006/10/09 PHP
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
PHP分页类集锦
2014/11/18 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
常用jQuery代码分享
2015/07/14 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
利用python写个下载teahour音频的小脚本
2017/05/08 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
优秀实习自我鉴定
2013/12/04 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
公司户外活动总结
2014/07/04 职场文书
超市创业计划书
2014/09/15 职场文书
学生逃课检讨书
2015/02/17 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
八年级作文之友情
2019/11/25 职场文书
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python