Javascript 数组排序详解


Posted in Javascript onOctober 22, 2014

如果你接触javascript有一段时间了,你肯定知道数组排序函数sort,sort是array原型中的一个方法,即array.prototype.sort(),sort(compareFunction),其中compareFunction是一个比较函数,下面我们看看来自Mozilla MDN 的一段描述:
If compareFunction is not supplied, elements are sorted by converting them to strings and comparing strings in lexicographic (“dictionary” or “telephone book,” not numerical) order. For example, “80″ comes before “9″ in lexicographic order, but in a numeric sort 9 comes before 80.

下面看些简单的例子:

// Output [1, 2, 3]

console.log([3, 2, 1].sort());
// Output ["a", "b", "c"]

console.log(["c", "b", "a"].sort());
// Output [1, 2, "a", "b"]

console.log(["b", 2, "a", 1].sort());

从上例可以看出,默认是按字典中字母的顺序来排序的。

幸运的是,sort接受一个自定义的比较函数,如下例:

function compareFunction(a, b) {

 if( a > b) {

  return -1;

 }else if(a < b) {

  return 1;

 }else {

  return 0;

 }

}

//Outputs ["zuojj", "Benjamin", "1"] 

console.log(["Benjamin", "1", "zuojj"].sort(compareFunction));

排序完我们又有个疑问,如何控制升序和降序呢?

function compareFunction(flag) {

 flag = flag ? flag : "asc";

 return function(a, b) {

  if( a > b) {

   return flag === "desc" ? -1 : 1;

  }else if(a < b) {

   return flag === "desc" ? 1 : -1;

  }else {

   return 0;

  }

 };

}

//Outputs ["1", "Benjamin", "zuojj"] 

console.log(["Benjamin", "1", "zuojj"].sort(compareFunction()));

//Outputs ["zuojj", "Benjamin", "1"] 

console.log(["Benjamin", "1", "zuojj"].sort(compareFunction("desc")));

comparFunction的排序规则是这样的:
1.If it returns a negative number, a will be sorted to a lower index in the array.
2.If it returns a positive number, a will be sorted to a higher index.
3.And if it returns 0 no sorting is necessary.

下面我们来看看摘自Mozilla MDN上的一段话:
The behavior of the sort method changed between JavaScript 1.1 and JavaScript 1.2.为了解释这段描述,我们来看个例子:

In JavaScript 1.1, on some platforms, the sort method does not work. This method works on all platforms for JavaScript 1.2.

In JavaScript 1.2, this method no longer converts undefined elements to null; instead it sorts them to the high end of the array.详情请戳这里。

var arr = [];

arr[0] = "Ant";

arr[5] = "Zebra";

//Outputs ["Ant", 5: "Zebra"] 

console.log(arr);

//Outputs 6

console.log(arr.length);

//Outputs "Ant*****Zebra"

console.log(arr.join("*"));

//排序

var sortArr = arr.sort();

//Outputs ["Ant", "Zebra"] 

console.log(sortArr);

//Outputs 6

console.log(sortArr.length);

//Outputs "Ant*Zebra****"

console.log(sortArr.join("*"));

希望本文对你学习和了解sort()方法有帮助,文中不妥之处还望批评斧正。

参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

Javascript 相关文章推荐
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
jQuery实现动画效果的简单实例
Jan 27 Javascript
js限制checkbox选中个数以限制六个为例
Jul 15 Javascript
介绍JavaScript的一个微型模版
Jun 24 Javascript
js时钟翻牌效果实现代码分享
Jul 31 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
Sep 10 Javascript
jQuery页面加载初始化的3种方法(推荐)
Jun 02 Javascript
JavaScript cookie详解及简单实例应用
Dec 31 Javascript
基于axios封装fetch方法及调用实例
Feb 05 Javascript
layui 给数据表格加序号的方法
Aug 20 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 Javascript
Javascript中arguments对象详解
Oct 22 #Javascript
Javascript中的默认参数详解
Oct 22 #Javascript
js style动态设置table高度
Oct 21 #Javascript
js读写json文件实例代码
Oct 21 #Javascript
一个JavaScript防止表单重复提交的实例
Oct 21 #Javascript
javascript Deferred和递归次数限制实例
Oct 21 #Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 #Javascript
You might like
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
深入理解Python3 内置函数大全
2017/11/23 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
实习生工作证明范本
2014/09/14 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
公务员个人考察材料
2014/12/23 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
Mysql 如何查询时间段交集
2021/06/08 MySQL