javascript内置的sort函数是多种排序算法的集合

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

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

   ArrayObject.sort(order);

  测试A:      
        var mm=[1,4,0,6,3,1,2];
mm.sort();
alert(mm);//0 1 1 2 3 4 6 

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

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

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

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。a,b视为相等
  • 若 a 大于 b,则返回一个大于 0 的值。b应该排在a的后面
测试B:
function NumAscSort(a,b)
{
return a-b;
}
function NumDescSort(a,b)
{
return b-a;
}
var arr = new Array( 1, 2, 3, 4); 
arr.sort(NumDescSort);
alert(arr);//4 3 2 1
arr.sort(NumAscSort);
alert(arr);// 1 2 3 4
比较字符数组
测试C:
var myarray=["Apple", "Banana", "Orange"]
myarray.sort()
alert(myarray);//Apple  Banana  Orange
数组直接调用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"));
alert(employees);

到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对age排序,如果age相同,再比较name。

这时,我们可以进一步修改by函数,让其可以接受第二个参数,当主要的键值产生一个匹配的时候,另一个compare方法将被调用以决出高下。

//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下

var by = function(name,minor)
{
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 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 {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',by('name')));
alert(employees);

转载于:https://www.cnblogs.com/kycool/archive/2011/10/25/2223473.html

JavaScript数组内置排序函数相关推荐

  1. JavaScript数组内置方法-知识

    /*         *  数组中常用的内置方法:基于这些方法可以让我们有效的对数组进行操作         *  console.dir(Array.prototype)  查看数组内置方法     ...

  2. java 内置排序函数_java排序函数

    7. 数组排序 函数:Arrays.sort(); [java] view pl... 在 caller 的实例中,将实现了 A 接口的对象的引用传给 caller,后调用 call()方法; 注意: ...

  3. javascript内置顶层函数

    javascript 内置顶层函数 名词解释: 1.函数 2.内置:  ECMAscript 内置函数:ECMAscript 自带的函数  Number() 宿主函数: BOM    DOM   al ...

  4. java使用数组排序方法_java数组中的排序问题(冒泡排序方法的实现,及内置排序算法的应用)...

    在编程过程中对数组的运用也是很关键的,我们往往需要利用到数组,其中有一点就是当涉及到数组的排序问题,我们应该如何解决? 今天我来介绍两种常用的排序方法 一,冒泡排序序法 冒泡排序的原理: 1.比较相邻 ...

  5. javascript的内置对象以及BOM(定时器,location)

    javascript的内置对象以及BOM 内置对象 Number 代码演示 <script>//1. parseFloat() 将传入的字符串浮点数转为浮点数document.write( ...

  6. 【Matlab入门】使用内置的函数和常量

    使用内置的函数和常量 基本函数 三角函数 atan(a/b):根据正切求角度,范围为[−π2,π2{-}\frac{\pi }{2},\frac{\pi }{2}−2π​,2π​] atan2(a,b ...

  7. VBA与Excel内置的函数

    了解VBA与Excel内置的函数,能够使我们处理起任务来事半功倍.这些函数不仅使用方便,而且效率一般都比较高(有些是例外的,特别是某些工作表函数),比我们自己写的要高效的多. VBA内置的函数 VBA ...

  8. JavaScript之基础-9 JavaScript String(内置对象、String概述、字符串常用操作、模式匹配)...

    一.JavaScript 内置对象 内置对象 - 什么是内置对象? 内置对象就是ECMAScript标准中已经定义好的,由浏览器厂商已经实现的标准对象 - 内置对象中封装了专门的数据和操作数据常用的A ...

  9. awk内置字符串函数详解

    awk提供了许多强大的字符串函数,见下表: awk内置字符串函数 gsub(r,s) 在整个$0中用s替代r gsub(r,s,t) 在整个t中用s替代r index(s,t) 返回s中字符串t的第一 ...

最新文章

  1. R使用lm构建单变量线性回归模型
  2. [HAOI 2010]软件安装
  3. exit()与_exit()函数的区别
  4. 天联高级版客户端_金万维天联高级版服务器安装配置全流程以及客户端登录流程...
  5. 【BZOJ】【4145】【AMPPZ2014】The Prices
  6. 前端学习(1545):模型和控制器
  7. delphi 获取桌面路径
  8. 用户不在sudoers文件中,需要使用命令 sudo npm install 的解决方法
  9. Spring包的依赖关系以及提供下载
  10. 单片机最小系统c语言报告,单片机最小系统实验报告.doc
  11. 2019一注结构成绩_2019年福建地区计算机考研汇总分析
  12. hasOwnProperty()方法与in操作符
  13. 蜗牛星际B双 安装黑群晖7.1(U盘引导)
  14. java连接ftp服务器
  15. 贴片DO-218AB封装TVS二极管SM8T33A
  16. 显卡故障软件测试,显卡软硬件故障检查与排除实战
  17. 使用DevIL来加载OpenGL纹理
  18. FFmpeg完美编译iOS版本
  19. CocosCreator幼麟麻将搭建步骤
  20. 百万用户同时在线游戏服务器架构实现.doc 基于epoll 通信模型

热门文章

  1. 最有效的创建大数据模型的6个技巧
  2. c++单链表【构造函数、运算符重载、析构函数、增删查改等】
  3. Android Volley框架的使用(二)
  4. Zimbra高级应用之-双向证书认证(一)
  5. 判断DataRow中某列是否为空的方法
  6. 硬盘数据恢复经验(转)
  7. select函数分析
  8. 关于RTP时间戳及多媒体通信同步的问题/H264关于RTP协议的实现
  9. HALCON示例程序color_fuses_lut_trans.hdev通过颜色对保险丝进行分类
  10. 【pyqt5】——入门级模板(ui文件+ui转py文件+逻辑py文件)(消息提示框)