数组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 解析json的代码
Dec 16 Javascript
理解Javascript_11_constructor实现原理
Oct 18 Javascript
javascript倒计时功能实现代码
Jun 07 Javascript
document.createElement()用法及注意事项(ff下不兼容)
Mar 13 Javascript
javascript 构造函数方式定义对象
Jan 02 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
js实现适合新闻类图片的轮播效果
Feb 05 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
详解vue挂载到dom上会发生什么
Jan 20 Javascript
Vue中错误图片的处理的实现代码
Nov 07 Javascript
前端如何实现动画过渡效果
Feb 05 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 mysql数据库操作分页类
2008/06/04 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
比Jquery的document.ready更快的方法
2010/04/28 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
python不带重复的全排列代码
2013/08/13 Python
Python利用IPython提高开发效率
2016/08/10 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python列表元素常见操作简单示例
2019/10/25 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
争先创优个人总结
2015/03/04 职场文书
驳回起诉裁定书
2015/05/19 职场文书
新闻稿怎么写
2015/07/18 职场文书
小学数学教师研修日志
2015/11/13 职场文书