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代码
Sep 27 Javascript
javascript从image转换为base64位编码的String
Jul 29 Javascript
jQuery控制网页打印指定区域的方法
Apr 07 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
jQuery的Read()方法代替原生JS详解
Nov 08 Javascript
JS实现重新加载当前页面或者父页面的几种方法
Nov 30 Javascript
bootstrap导航、选项卡实现代码
Dec 28 Javascript
BootStrap Fileinput初始化时的一些参数
Dec 30 Javascript
详解解决使用axios发送json后台接收不到的问题
Jun 27 Javascript
浅谈vue加载优化策略
Mar 19 Javascript
浅析Vue 防抖与节流的使用
Nov 14 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 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
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
Javascript继承机制的设计思想分享
2011/08/28 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
python学习数据结构实例代码
2015/05/11 Python
Python实现截屏的函数
2015/07/25 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
python读取文件名称生成list的方法
2018/04/27 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python实现的分层随机抽样案例
2020/02/25 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
安全检查与奖惩制度
2014/01/23 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
初中生物教学反思
2016/02/20 职场文书
Python中npy和mat文件的保存与读取
2022/04/24 Python