数组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 相关文章推荐
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
javaScript实现浮点数转十六进制字符
Oct 29 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
Jan 21 Javascript
javascript实现右下角广告框效果
Feb 01 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
小发现之浅谈location.search与location.hash的问题
Jun 23 Javascript
Vue中this.$router.push参数获取方法
Feb 27 Javascript
解决Layui 表单提交数据为空的问题
Aug 15 Javascript
详解webpack4之splitchunksPlugin代码包分拆
Dec 04 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
Jan 14 Javascript
js中实例与对象的区别讲解
Jan 21 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
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
详解如何较好的使用js
2016/12/16 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
面试常见的js算法题
2017/03/23 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
python错误处理详解
2014/09/28 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
对Python中plt的画图函数详解
2018/11/07 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Django中的session用法详解
2020/03/09 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
用python绘制樱花树
2020/10/09 Python
python 多线程中join()的作用
2020/10/29 Python
HTML5标签小集
2011/08/02 HTML / CSS
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
后勤主管工作职责
2013/12/07 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
奠基仪式主持词
2014/03/20 职场文书
幼儿园小班评语
2014/04/18 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
运动会新闻报道稿
2015/07/22 职场文书