数组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 相关文章推荐
硬盘浏览程序,保存成网页格式便可使用
Dec 03 Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 Javascript
基于jquery实现的省市区级联无ajax
Sep 24 Javascript
JS动态调用方法名示例介绍
Dec 18 Javascript
Bootstrap的图片轮播示例代码
Aug 31 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
JS 实现百度搜索功能
Feb 01 Javascript
微信小程序实现聊天对话(文本、图片)功能
Jul 06 Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 Javascript
跟混乱的页面弹窗说再见
Apr 11 Javascript
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
pnpm对npm及yarn降维打击详解
Aug 05 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/05/20 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
yii用户注册表单验证实例
2015/12/26 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
Node.js Domain 模块实例详解
2020/03/18 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
跟老齐学Python之list和str比较
2014/09/20 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
python在协程中增加任务实例操作
2021/02/28 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
实习生自我鉴定范文
2013/12/05 职场文书
广播体操比赛口号
2014/06/10 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
投标售后服务承诺书
2015/04/29 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
小学音乐课教学反思
2016/02/18 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS
Anaconda配置各版本Pytorch的实现
2021/08/07 Python