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 字符串操作函数
Jul 25 Javascript
解析javascript系统错误:-1072896658的解决办法
Jul 08 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
css如何让浮动元素水平居中
Aug 07 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
Dec 26 Javascript
微信小程序 蓝牙的实现实例代码
Jun 27 Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 Javascript
微信小程序实现分享到朋友圈功能
Jul 19 Javascript
详解Vue调用手机相机和相册以及上传
May 05 Javascript
ajax跨域访问遇到的问题及解决方案
May 23 Javascript
解决vue-cli 打包后自定义动画未执行的问题
Nov 12 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 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年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
PHP getName()函数讲解
2019/02/03 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python读取word文本操作详解
2018/01/22 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
高二政治教学反思
2014/02/01 职场文书
酒店营销策划方案
2014/02/07 职场文书
前台文员职责范本
2014/03/07 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
Python面向对象编程之类的概念
2021/11/01 Python