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 相关文章推荐
Dojo 学习笔记入门篇 First Dojo Example
Nov 15 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
模板视图和AngularJS之间冲突的解决方法
Nov 22 Javascript
JavaScript中localStorage对象存储方式实例分析
Jan 12 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
Node.js文件编码格式的转换的方法
Apr 27 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
Oct 25 Javascript
layui实现多图片上传并限制上传的图片数量
Sep 26 Javascript
原生JS无缝滑动轮播图
Oct 22 Javascript
Vue中axios拦截器如何单独配置token
Dec 27 Javascript
vue项目配置sass及引入外部scss文件
Apr 14 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
实现“上一页”和“下一页按钮
2006/10/09 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php实现网页端验证码功能
2017/07/11 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
python常见数制转换实例分析
2015/05/09 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
什么是数据抽象
2016/11/26 面试题
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
管理建议书范文
2014/05/13 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
大学生创业事迹材料
2014/12/30 职场文书
公司新员工欢迎词
2015/09/30 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技
Python使用DFA算法过滤内容敏感词
2022/04/22 Python
JS实现九宫格拼图游戏
2022/06/28 Javascript