数组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 相关文章推荐
document.open() 与 document.write()的区别
Aug 13 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
JS动态修改图片的URL(src)的方法
Apr 01 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
jQuery跨域问题解决方案
Aug 03 Javascript
JS实现异步上传压缩图片
Apr 22 Javascript
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
jQuery实现简单的下拉菜单导航功能示例
Dec 07 jQuery
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 Javascript
VUE+node(express)实现前后端分离
Oct 13 Javascript
JavaScript实现放大镜效果代码示例
Apr 29 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
简单谈谈PHP中strlen 函数
2016/02/27 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
js函数的引用, 关于内存的开销
2012/09/17 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
python基础知识小结之集合
2015/11/25 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Django添加feeds功能的示例
2018/08/07 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
党员的自我评价范文
2014/01/02 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
原告离婚代理词
2015/05/23 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript