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 相关文章推荐
JavaScript strike方法入门实例(给字符串加上删除线)
Oct 17 Javascript
浏览器复制插件zeroclipboard使用指南
Mar 26 Javascript
举例讲解jQuery中可见性过滤选择器的使用
Apr 18 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
Jul 07 Javascript
详解打造 Vue.js 可复用组件
Mar 24 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
Vue动态修改网页标题的方法及遇到问题
Jun 09 Javascript
vant IndexBar实现的城市列表的示例代码
Nov 20 Javascript
vue中使用echarts的示例
Jan 03 Vue.js
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
解析如何用php screw加密php源代码
2013/06/20 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
javascript实现的HashMap类代码
2014/06/27 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
Node中使用ES6语法的基础教程
2018/01/05 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
详解Python3中的 input() 函数
2020/03/18 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
企业统计员岗位职责
2013/12/13 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
办公室岗位职责
2014/02/12 职场文书
公务员保密承诺书
2014/03/27 职场文书
报告会主持词
2014/04/02 职场文书
初中家长寄语
2014/04/02 职场文书
社区禁毒工作方案
2014/06/02 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
2015年招聘工作总结
2014/12/12 职场文书
老人院义工活动感想
2015/08/07 职场文书
html5调用摄像头实例代码
2021/06/28 HTML / CSS