数组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 相关文章推荐
jQuery 开发者应该注意的9个错误
May 03 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
浅谈javascript回调函数
Dec 07 Javascript
原生js实现图片层叠轮播切换效果
Feb 02 Javascript
微信小程序canvas写字板效果及实例
Jun 15 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
动态加载权限管理模块中的Vue组件
Jan 16 Javascript
Vue批量图片显示时遇到的路径被解析问题
Mar 28 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
jQuery实现弹出层效果
Dec 10 jQuery
使用Angular9和TypeScript开发RPG游戏的方法
Mar 25 Javascript
Element Collapse 折叠面板的使用方法
Jul 26 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下删除字符串中HTML标签的函数
2008/08/27 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Python运行DLL文件的方法
2020/01/17 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
Bootstrap 学习分享
2012/11/12 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
双创工作实施方案
2014/03/26 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
报案材料怎么写
2015/05/25 职场文书
人生遥控器观后感
2015/06/11 职场文书
Redis可视化客户端小结
2021/06/10 Redis
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android