数组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 相关文章推荐
js控制href内容的连接内容的变化示例
Apr 30 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
Mar 13 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
JS鼠标拖拽实例分析
Nov 23 Javascript
js canvas实现擦除动画
Jul 16 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
Mar 21 Javascript
JS实现使用POST方式发送请求
Aug 30 Javascript
在layui下对元素进行事件绑定的实例
Sep 06 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
原生JS实现烟花效果
Mar 10 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
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
Python 文件重命名工具代码
2009/07/26 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
家长对孩子评语
2014/01/30 职场文书
篮球赛口号
2014/06/18 职场文书
电子专业求职信
2014/06/19 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
化妆品促销活动总结
2015/05/07 职场文书
预备党员转正意见
2015/06/01 职场文书
初中英语教学随笔
2015/08/15 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL