数组Array的排序sort方法


Posted in Javascript onFebruary 17, 2017

JavaScript中的Array对象有自己的排序方法sort(),对数组中的数据项进行排序,但是有时候排序结果不尽如人意,比如

var arr = [12, 1, 2, 21, 3];
arr.sort();
alert(arr);   得到的结果为 1,12,2,21,3

这是为什么呢?因为JavaScript中的排序默认按照ascii字符代码进行排序,也就是说,数字也是按照它们的字符串形式排序的。

var strArr = ['a', '2', 'a2', '2a', 'b', '3'];
alert(strArr.sort());

这个得到什么结果呢? 2,2a,3,a,a2,b

因为 数字的ascii码比字母的小,所以数字排在前面,字母排在后面。

如果想继续让上面的数组arr按照数字进行排序,怎么处理呢?

JavaScript给我们提供了一个入口,可以给sort() 方法传递一个参数,即比较函数,来告诉排序算法值与值之间是大于、小于还是等于关系。

比较函数是有着特定算法的函数。

function compare_fn(value1, value2) {
 if (value1 < value2) {
 return -1;
 } else if (value1 > value2) {
 return 1;
 } else {
 return 0;
 }
}

将比较函数 compare_fn 传递给sort,再进行排序,然后输出

arr.sort(compare_fn);
alert(arr);  得到 1, 2, 3, 12, 21

JavaScript中Array对象的sort方法返回值的定义为

负值 : 如果所传递的第一个参数比第二个参数小

零 : 两个值相等

正值 : 如果第一个参数比第二个参数大

上面的比较函数还可以简写为

function compare_fn(value1, value2) {
 return value1 - value2;
}

这个比较的为升序排列

如果想降序排列,直接改变上面的返回值的符号就可以了,给所有返回均取反。

对简写的比较函数就是

function compare_fn(value1, value2) {
 return -(value1 - value2);
}

function compare_fn(value1, value2) {
 return value2 - value1;
}

简单的记法就是:顺序升;逆序降。

以上这篇数组Array的排序sort方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
Nov 06 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
javascript复制粘贴与clipboardData的使用
Oct 16 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
JS奇技之利用scroll来监听resize详解
Jun 15 Javascript
Vue点击切换颜色的方法
Sep 13 Javascript
JavaScript常见事件处理程序实例总结
Jan 05 Javascript
vue+element实现打印页面功能
May 20 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
Oct 25 Javascript
vuecli项目构建SSR服务端渲染的实现
Oct 30 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 #Javascript
数组Array的一些方法(总结)
Feb 17 #Javascript
深入理解javascript的getTime()方法
Feb 16 #Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 #Javascript
js时间戳格式化成日期格式的多种方法介绍
Feb 16 #Javascript
基于JavaScript实现拖动滑块效果
Feb 16 #Javascript
js实现移动端微信页面禁止字体放大
Feb 16 #Javascript
You might like
一个好用的分页函数
2006/11/16 PHP
优化PHP程序的方法小结
2012/02/23 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
GreyBox技术总结(转)
2010/11/23 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
babel的使用及安装配置教程
2018/02/22 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
详解Django中的权限和组以及消息
2015/07/23 Python
Python对数据库操作
2016/03/28 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
基于python历史天气采集的分析
2019/02/14 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
会计人员岗位职责
2014/03/19 职场文书
大学生就业策划书范文
2014/04/04 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书