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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
Mar 10 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
Jul 10 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
Nov 04 Javascript
JavaScript调试之console.log调试的一个小技巧分享
Aug 07 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
如何理解Vue的v-model指令的使用方法
Jul 19 Javascript
Vue CLI3 如何支持less的方法示例
Aug 29 Javascript
vue组件通信传值操作示例
Jan 08 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
Sep 02 Javascript
Vue组件化(ref,props, mixin,.插件)详解
May 15 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输出金字塔的2种实现方法
2014/12/16 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
PHP7新特性简述
2017/06/11 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
在Django中限制已登录用户的访问的方法
2015/07/23 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python组合无重复三位数的实例
2018/11/13 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
焦裕禄观后感
2015/06/03 职场文书
学校食堂管理制度
2015/08/04 职场文书
晚会开幕词范文
2016/03/04 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
用Python将库打包发布到pypi
2021/04/13 Python