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 相关文章推荐
jquery图片不完全按比例自动缩小的简单代码
Jul 29 Javascript
用Js实现的动态增加表格示例自己写的
Oct 21 Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
利用CSS3在Angular中实现动画
Jan 15 Javascript
JavaScript学习笔记之取数组中最大值和最小值
Mar 23 Javascript
JQuery插件Marquee.js实现无缝滚动效果
Apr 26 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 Javascript
利用Vue2.x开发实现JSON树的方法
Jan 04 Javascript
对vue中methods互相调用的方法详解
Aug 30 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 Javascript
java和js实现的洗牌小程序
Sep 30 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
PHP读取目录下所有文件的代码
2008/01/07 PHP
apache rewrite_module模块使用教程
2008/01/10 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
降低PHP Redis内存占用
2017/03/23 PHP
简单实现php上传文件功能
2017/09/21 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
一个用js实现控制台控件的代码
2007/09/04 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
如何利用python进行时间序列分析
2020/08/04 Python
Python调用JavaScript代码的方法
2020/10/27 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
高三自我鉴定
2013/10/23 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
给校长的建议书300字
2014/05/16 职场文书
档案保密承诺书
2014/06/03 职场文书
医学专业大学生求职信
2014/07/12 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
小王子读书笔记
2015/06/29 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python