数组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 进阶篇1 正则表达式,cookie管理,userData
Mar 14 Javascript
jquery及原生js获取select下拉框选中的值示例
Oct 25 Javascript
JQuery用户名校验的具体实现
Mar 18 Javascript
AngularJS Ajax详解及示例代码
Aug 17 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
vue mounted组件的使用
Jun 18 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
利用layer实现表单完美验证的方法
Sep 26 Javascript
vue点击按钮动态创建与删除组件功能
Dec 29 Javascript
详解Vue Cli浏览器兼容性实践
Jun 08 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
Oct 30 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 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
php中Smarty模板初体验
2011/08/08 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
用python写asp详细讲解
2013/12/16 Python
Python实现的爬虫功能代码
2017/06/24 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
Python 硬币兑换问题
2019/07/29 Python
python求质数列表的例子
2019/11/24 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
市场营销管理制度
2014/01/29 职场文书
师说教学反思
2014/02/07 职场文书
卖车协议书
2014/04/21 职场文书
机动车交通事故协议书
2015/01/29 职场文书
幼师自荐信范文
2015/03/06 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
go开发alertmanger实现钉钉报警
2021/07/16 Golang