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 Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
Mar 16 Javascript
jQuery1.6 使用方法一
Nov 23 Javascript
Javascript的常规数组和关联数组对比小结
May 24 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
JavaScript中的对象继承关系
Aug 01 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
jquery tmpl模板(实例讲解)
Sep 02 jQuery
详解create-react-app 自定义 eslint 配置
Jun 07 Javascript
webpack4 从零学习常用配置(小结)
May 28 Javascript
JavaScript实现文件下载并重命名代码实例
Dec 12 Javascript
微信小程序实现多张图片上传功能
Nov 18 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
微信公众平台天气预报功能开发
2014/07/06 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
javascript工具库代码
2012/03/29 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
python reduce 函数使用详解
2017/12/05 Python
python实现推箱子游戏
2020/03/25 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
求职信的要素有哪些呢
2013/12/26 职场文书
自主实习接收函
2014/01/13 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
项目经理助理岗位职责
2015/04/13 职场文书