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取float型小数点后两位数的方法
Jan 18 Javascript
jquery插件推荐 jquery.cookie
Nov 09 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
给easyui的datebox控件添加清空按钮的实现方法
Nov 09 Javascript
详解Weex基于Vue2.0开发模板搭建
Mar 20 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
Jul 10 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
Nov 27 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
vue项目中微信登录的实现操作
Sep 08 Javascript
Express 配置HTML页面访问的实现
Nov 01 Javascript
vue实现列表垂直无缝滚动
Apr 08 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 函数执行效率的小比较
2010/10/17 PHP
php类常量的使用详解
2013/06/08 PHP
PHP的全局错误处理详解
2016/04/25 PHP
php测试kafka项目示例
2020/02/06 PHP
JS删除数组元素的函数介绍
2013/03/27 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
javascript self对象使用详解
2016/10/18 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Python subprocess模块常见用法分析
2018/06/12 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Python使用type动态创建类操作示例
2020/02/29 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
成人教育自我鉴定
2013/11/01 职场文书
会计助理的岗位职责
2013/11/29 职场文书
结婚典礼主持词
2015/06/29 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python