数组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 相关文章推荐
不同浏览器对回车提交表单的处理办法
Feb 13 Javascript
js数组Array sort方法使用深入分析
Feb 21 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
Javascript动态创建表格及删除行列的方法
May 15 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
javascript中call,apply,bind函数用法示例
Dec 19 Javascript
JS实现DIV高度自适应窗口示例
Feb 16 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
详解vuex 中的 state 在组件中如何监听
May 23 Javascript
详解vue 图片上传功能
Apr 30 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 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
ajax实现无刷新分页(php)
2010/07/18 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
javascript 函数调用规则
2009/08/26 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
Python实现翻转数组功能示例
2018/01/12 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
python使用turtle绘制分形树
2018/06/22 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
python日期相关操作实例小结
2019/06/24 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
主管会计岗位职责
2014/03/13 职场文书
公司授权委托书范本
2014/09/18 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
大雁塔英文导游词
2015/02/10 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
监理中标通知书
2015/04/16 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python