JavaScript实现多维数组、对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序。

sort() 方法用于对数组的元素进行排序。语法如下:

arrayObject.sort(sortby)

返回值为对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。

function NumAscSort(a,b)
{return a - b;
}
function NumDescSort(a,b)
{return b - a;
}
var arr = new Array( 3600, 5010, 10100, 801);
arr.sort(NumDescSort);
alert(arr);
arr.sort(NumAscSort);
alert(arr);

sort(fun)接受了个排序规则函数,这个函数将比较2个数字的大小。而我们的对象数组排序,实际上原理也是一样的。
如果不比较数字的大小,则可以这样:

var myarray=["Apple", "Banana", "Orange"]
myarray.sort()

数组直接调用sort()后,数组按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。
对于对象数组排序,我们先写一个构造比较函数的函数:

//by函数接受一个成员名字符串做为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
var by = function(name){return function(o, p){var a, b;if (typeof o === "object" && typeof p === "object" && o && p) {a = o[name];b = p[name];if (a === b) {return 0;}if (typeof a === typeof b) {return a < b ? -1 : 1;}return typeof a < typeof b ? -1 : 1;}else {throw ("error");}}
}

要排序的数组:

var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}

直接调用函数:

employees.sort(by("age"));

到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对age排序,如果age相同,再比较name。
这时,我们可以进一步修改by函数,让其可以接受第二个参数,当主要的键值产生一个匹配的时候,另一个compare方法将被调用以决出高下。

//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下
var by = function(name,minor){return function(o,p){var a,b;if(o && p && typeof o === 'object' && typeof p ==='object'){a = o[name];b = p[name];if(a === b){return typeof minor === 'function' ? minor(o,p):0;}if(typeof a === typeof b){return a < b ? -1:1;}return typeof a < typeof b ? -1 : 1;}else{thro("error");}}
}employees.sort(by('age',by('name')));

好了,现在可以放心使用了。如果看不懂,可直接copy 这个by函数到你的应用里面,直接调用即可。

Js数组排序函数sort()介绍相关推荐

  1. Js数组排序函数:sort()

    原文链接:https://blog.csdn.net/qq_37936542/article/details/78979521 js原生的 sort() 排序函数使用起来很方便 语法:arrayObj ...

  2. 深入探讨JS中的数组排序函数sort()和reverse()

    最近在研究Javascript发现了其中一些比较灵异的事情.有点让人感到无语比如: alert(typeof( NaN == NaN));//结果为假. alert(typeof( NaN != Na ...

  3. JavaScript 数组排序函数sort()的使用

    简介   sort()方法是js中对于数组进行排序的函数.其可以方便快捷的实现对于数组的排序而不用我们自己编写排序方法.注:sort()函数会直接改变原数组. 1.纯字符串数组排序 let myArr ...

  4. PHP 数组排序函数sort,rsort,ksort,krsort,asort,arsort区别

    一.概念:     1.自然排序法:即按自然数的大小排序,例如"10>2";     2.计算机标准排序法:是以逐个字符比较,排序,例如"2>10" ...

  5. js排序函数sort

    sort() 方法用于对数组的元素进行排序,并返回数组,原数组发生改变. 语法:array.sort(fun):参数fun可选.规定排序顺序.必须是函数. 如果调用该方法时没有使用参数,按照字符编码的 ...

  6. Js 箭头函数 详细介绍(多种使用场景差异,你学会了吗?)

    简要认识 箭头函数是在ES6中添加的一种规范,简化了匿名函数定义的写法. 基本格式 完整写法 let fn = (x,y) => {return x + y; }//function()写法 l ...

  7. php的数组排列函数,常用PHP数组排序函数归纳

    数组排序:数组中的元素能够以字母或数字顺序进行升序或降序排序. 常用的PHP数组排序函数 •sort() - 以升序对数组排序 •rsort() - 以降序对数组排序 •asort() - 根据值,以 ...

  8. JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

    本文实例总结了JS数组排序技巧.分享给大家供大家参考,具体如下: 1.冒泡排序 var temp = 0; for (var i = 0; i < array.length; i++) { fo ...

  9. js数组排序实用方法集锦

    js数组排序实用方法集锦 前言: 据说程序员三个月就能忘记自己写的代码,所以最好是在有空的时候及时做些总结,记录下来,这样后边遇到类似问题的话,就可以直接先查看自己的博客了.写技术博客,对自己是一种总 ...

最新文章

  1. 吴恩达家免费 NLP 课程重磅上线!110 个小视频教你做出聊天机器人,粉丝:我要让娃跟吴恩达姓!...
  2. HDLBits 系列(35)Lemmings Game
  3. scrollview 实现滑动到底部再滑动加载数据的功能
  4. 云计算将使IT人失业?惠普推云计算裁员九千!程序员如何面对即将到来的产业大调整?...
  5. 修改Linux内核启动图片
  6. 13亿美元的思想实验
  7. Your connection is not private Attackers might be trying to steal your information from nemertes.lis
  8. 各种泵的图形符号_常见液压系统中液压元件图形符号
  9. 免费的进销存系统哪个好一些?
  10. python导入上一级目录自定义模块
  11. 相关性分析:Pearson、Kendall、Spearman
  12. Golang Hotfix技术背景
  13. DataWhale组队学习——DCIC赛事 task1
  14. #MoreThanCode:社会正义技术
  15. 「js基础」JavaScript入门,难不难你来说
  16. Android 应用进程保活APP常驻内存研究方案
  17. Output Messenger 2.0.10 Full - 即时消息软件(服务端+客户端)
  18. SpringMVC条件查询+分页时下一页丢失查询条件
  19. 计算机毕业设计ssm毕业设计过程管理系统049a8系统+程序+源码+lw+远程部署
  20. [20210429更新]软件方法(下)分析和设计 第8章 连载

热门文章

  1. MATLAB学习笔记(十八)
  2. 服役七年超级计算机,太费电 曾经的最快超级计算机服役5年即退休
  3. oracle中srv添加监听服务,Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务...
  4. 3-9in-place的概念和广播机制
  5. flask创建mysql表_Flask-SQLAlchemy 无法创建数据库???
  6. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机||CSDN博文精选...
  7. mysql两条完全相同的数据_两条完全相同的数据怎么用sql语句删除一条
  8. 中移4G模块-ML302-OpenCpu开发-2-MQTT连接阿里云
  9. db h2 数据类型_H2数据库函数及数据类型概述-阿里云开发者社区
  10. torchvision resize 指定生成图片的尺寸