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 文件本身编码转换 图文教程
Oct 12 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
基于jquery css3实现点击动画弹出表单源码特效
Aug 31 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
JavaScript简单计算人的年龄示例
Apr 15 Javascript
setTimeout时间设置为0详细解析
Mar 13 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 Javascript
微信小程序实现文件预览
Oct 22 Javascript
JS前端可视化canvas动画原理及其推导实现
Aug 05 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 一元分词算法
2009/11/30 PHP
PHP的基本常识小结
2013/07/05 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
用javascript操作xml
2006/11/04 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
python画折线图的程序
2018/07/26 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
python里dict变成list实例方法
2019/06/26 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
python ubplot使用方法解析
2020/01/10 Python
2014年学习雷锋活动总结
2014/03/01 职场文书
婚礼主持词
2014/03/13 职场文书
安全教育月活动总结
2014/05/05 职场文书
公司捐款倡议书
2014/05/14 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
Pytorch可视化的几种实现方法
2021/06/10 Python