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 相关文章推荐
JavaScript 对象成员的可见性说明
Oct 16 Javascript
JQuery弹出层示例可自定义
May 19 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
Html中 IFrame的用法及注意点
Dec 22 Javascript
vue 2.0封装model组件的方法
Aug 03 Javascript
Vue.js更改调试地址端口号的实例
Sep 19 Javascript
浅谈Angular 观察者模式理解
Nov 01 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
Dec 11 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
在vue+element ui框架里实现lodash的debounce防抖
Nov 13 Javascript
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
Angular性能优化之第三方组件和懒加载技术
May 10 Javascript
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
桌面中心(四)数据显示
2006/10/09 PHP
pw的一个放后门的方法分析
2007/10/08 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
小程序实现锚点滑动效果
2019/09/23 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python入门教程之if语句的用法
2015/05/14 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python使用folium excel绘制point
2019/01/03 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
如何使用python代码操作git代码
2020/02/29 Python
关于python中导入文件到list的问题
2020/10/31 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
表扬信格式
2014/01/12 职场文书
生产部岗位职责范文
2014/02/07 职场文书
关于美容院的活动方案
2014/08/14 职场文书
撤诉书怎么写
2015/05/19 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers