数组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实现select组件的选择输入过滤代码
Oct 14 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
Jul 06 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
Aug 17 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
Nov 18 Javascript
浅谈Javascript数据属性与访问器属性
Jul 26 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
详解vue表单验证组件 v-verify-plugin
Apr 19 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
对vue 键盘回车事件的实例讲解
Aug 25 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
JavaScript如何借用构造函数继承
Nov 06 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 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中的日期加减方法示例
2014/08/21 PHP
Chrome Web App开发小结
2014/09/04 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python素数检测实例分析
2015/06/15 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python贪心算法实例小结
2018/04/22 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
python DataFrame 取差集实例
2019/01/30 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
煤矿班组长的职责
2013/12/25 职场文书
中文专业毕业生自荐书范文
2014/01/04 职场文书
北京大学自荐信范文
2014/01/28 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书