Javascript数组的排序 sort()方法和reverse()方法


Posted in Javascript onJune 04, 2012

其中:

1.JavaScript的sort()中如果没有指定比较函数,则默认会按照字符的编码顺序进行升序排序。也就是说如果我们想要对数值进行排序得到的不一定是我们想要的结果。

2.Javascript的reverse()将数组中的元素逆序。

先看看上面的第一点,如果有一个数组arr=[1,6,3,7,9],使用arr.sort()后,数组的顺序为1,3,6,7,9,得到了我们想要的结果。

再看看下面的一个数组排序:arr=[3,1,16,34,30],如果执行arr.sort()后是不是还是会得到我们想要的1,3,16,30,34呢?

执行后我们发现结果为:1,16,3,30,34,显然结果不是我们想要的。实际上,sort方法将上面的数值按照字符串方式排序了,也就是说和数组arr1=['3','1','16','34','30']的排序结果一致。

代码如下:

var arr=[3,1,16,34,30]; 
var arr1=['3','1','16','34','30']; 
alert(arr.sort()); // 1,16,3,30,34 
alert(arr1.sort()); // 1,16,3,30,34

那么如果我们想要得到正确的结果:1,3,16,30,34 应该怎么去做呢?

查询javascript手册,手册中的说明如下:

定义和用法

sort() 方法用于对数组的元素进行排序。

语法

arrayObject.sort(sortby)参数 描述
sortby 可选。规定排序顺序。必须是函数。

返回值

对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

说明

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
=====================================

由以上说明我们可以了解到,如果要按照数值进行排序,那么就要提供一个比较函数。一般常见的比较函数如下:

function sortArr(m,n){ 
if(m<n) 
return -1;//小于,返回-1 
else if(m>n) 
return 1;//大于,返回1 
else return 0;//等于,返回0 
}

精简后可以写成如下两种形式:
function sortArr(m,n){ 
return m-n; 
}

function sortArr(m,n){ 
return m>n?1:(m<n?-1:0); 
}

然后执行arr.sort(sortArr),发现可以得到我们想要的结果:1,3,16,30,34.也就说将数组按照整型数值进行了升序排序。
这样的话新的问题就来了,如果我们想要对数组进行降序排序怎么做呢?

有一思路就是改变sortArr函数的返回值,如果m<n时返回正直,m>n时返回负值,m=n时返回0。这样就可以了。

你可以写两个函数,一个升序,一个降序。然后根据不同的需要调用不同的函数就可以了。

此外我们还可以调用上面提到的另一个函数reverse()来轻松的实现,当我们进行升序排序后,然后数组在调用reverse()方法将数组逆序,这样就可以实现数组的降序排序了。

代码如下:

arr.sort(sortArr).reverse();

总结:这里主要介绍了Javascript中数组的排序,由于默认按照字符串排序,要实现按照其他形式的规则排序就要自己定义比较函数了。
Javascript 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
Prototype Hash对象 学习
Jul 19 Javascript
基于JQuery的密码强度验证代码
Mar 01 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
Mar 27 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
Apr 24 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
Feb 02 Javascript
vue router导航守卫(router.beforeEach())的使用详解
Apr 19 Javascript
Ant Design moment对象和字符串之间的相互转化教程
Oct 27 Javascript
javascript中获取下个月一号,是星期几
Jun 01 #Javascript
一行代码告别document.getElementById
Jun 01 #Javascript
javascript的console.log()用法小结
May 31 #Javascript
jQuery 联动日历实现代码
May 31 #Javascript
从阶乘函数对比Javascript和C#的异同
May 31 #Javascript
javascript 快速排序函数代码
May 30 #Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
May 30 #Javascript
You might like
收音机指标测试方法及仪器
2021/03/01 无线电
PHP 和 COM
2006/10/09 PHP
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
Python Requests库基本用法示例
2018/08/20 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python 爬取小说并下载的示例
2020/12/07 Python
学习十八大报告感言
2014/02/28 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python