数组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 获取服务器控件值的代码
Mar 05 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
Oct 29 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
javascript中Function类型详解
Apr 28 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
May 06 Javascript
jquery实现左右滑动菜单效果代码
Aug 27 Javascript
Javascript控制div属性动态变化实例分析
Oct 08 Javascript
JS实现的五级联动菜单效果完整实例
Feb 23 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
详释JavaScript执行环境与执行栈
Apr 02 Javascript
js实现打字小游戏
Dec 17 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
Jan 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 Sql Server连接失败问题及解决办法
2009/08/07 PHP
深入PHP异步执行的详解
2013/06/03 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Python中正则表达式的用法实例汇总
2014/08/18 Python
使用Python编写Linux系统守护进程实例
2015/02/03 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python类class参数self原理解析
2020/11/19 Python
怎样写好自我鉴定
2013/12/04 职场文书
银行求职信个人范文
2013/12/16 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
员工辞职信怎么写
2015/02/27 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
Python中的tkinter库简单案例详解
2022/01/22 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript