数组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 相关文章推荐
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
Apr 02 Javascript
Jquery.addClass始终无效原因分析
Sep 08 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
Jan 13 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
JavaScript实现倒计时跳转页面功能【实用】
Dec 13 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
JavaScript深拷贝和浅拷贝概念与用法实例分析
Jun 07 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
Sep 07 Javascript
vue全局使用axios的方法实例详解
Nov 22 Javascript
js中async函数结合promise的小案例浅析
Apr 14 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
Nov 07 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
python如何让类支持比较运算
2018/03/20 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
高中打架检讨书
2014/02/13 职场文书
协议书的格式
2014/04/23 职场文书
员工合理化建议书
2014/05/19 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
入党函调证明材料
2015/06/19 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
高中体育课教学反思
2016/02/16 职场文书
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫