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 相关文章推荐
网站页面自动跳转实现方法PHP、JSP(上)
Aug 01 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
Jun 06 Javascript
Ionic如何实现下拉刷新与上拉加载功能
Jun 03 Javascript
纯js实现悬浮按钮组件
Dec 17 Javascript
JavaScript优化以及前段开发小技巧
Feb 02 Javascript
canvas实现十二星座星空图
Feb 14 Javascript
Node.js  事件循环详解及实例
Aug 06 Javascript
Angular实现搜索框及价格上下限功能
Jan 19 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
vue抽出组件并传值实例
Jul 31 Javascript
js实现纯前端压缩图片
Nov 16 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
PHP.MVC的模板标签系统(一)
2006/09/05 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
python中列表元素连接方法join用法实例
2015/04/07 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
使用Python来开发微信功能
2018/06/13 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Python多继承原理与用法示例
2018/08/23 Python
python动态文本进度条的实例代码
2020/01/22 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
自愿离婚协议书范本
2014/09/13 职场文书
爱心募捐通知范文
2015/04/27 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
SQL写法--行行比较
2021/08/23 SQL Server
关于python中模块和重载的问题
2021/11/02 Python
Python中time与datetime模块使用方法详解
2022/03/31 Python