JavaScript数组内置排序函数

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Wireshark安装Npcap组件失败

2019独角兽企业重金招聘Python工程师标准>>> 解决Wireshark安装Npcap组件失败 从Wireshark 3.0开始&#xff0c;Npcap取代Winpcap组件&#xff0c;成为Wireshark默认的网卡核心驱动。由于该组件属于驱动程序&#xff0c;所以安装时候容易被杀毒/防火墙软件拦截&…

adobe清理工具_Adobe终于通过其新的渐变工具实现了这一点-UX评论

adobe清理工具的Photoshop (Photoshop) UX:用户体验&#xff1a; At first glance, the UX looks okay; it’s pretty clear. The user gets to know how to use this tool right away. The color palette is located above, and the gradient down below. The diamond betwee…

GMF学习系列(二) 一些知识点(续2)

8.插件的国际化&#xff0c;可以参考nwpu.cdcsp.sbpel.diagram.part中messages.java的做法。 9.Text自动提示功能 import org.eclipse.jface.bindings.keys.KeyStroke; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.fieldassist.AutoCompleteField; im…

新手向:前端程序员必学基本技能——调试JS代码

1前言大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与&#xff0c;已进行三个月了&#xff0c;大家一起交流学习&#xff0c;共同进步。想学源码&#xff0c;极力推荐之前我写的《学习源码整体架构系列》 包含jQuery、un…

iOS开发ApplePay的介绍与实现

1、Apple Pay的介绍 Apple Pay官方1.1 Apple Pay概念 Apple Pay&#xff0c;简单来说, 就是一种移动支付方式。通过Touch ID/ Passcode&#xff0c;用户可使用存储在iPhone 6, 6p等之后的新设备上的信用卡和借记卡支付证书来授权支付&#xff1b; 它是苹果公司在2014苹果秋季新…

mes建设指南_给予和接受建设性批评的设计师指南

mes建设指南Constructive criticism, or more plainly, feedback, plays a crucial role in a designer’s job. Design is an iterative process, so we are often either asking for feedback on our own work or dishing it out to a fellow designer.建设性的批评&#xff…

面试官:请实现一个通用函数把 callback 转成 promise

1. 前言大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与&#xff0c;或者在公众号&#xff1a;若川视野&#xff0c;回复"源码"参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。已进行…

java中filter的用法

filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了&#xff0c;直接给几个已经写好的代码&#xff1a; 一、使浏览器不缓存页面的过滤器 Java代码 import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOExcept…

我很喜欢玩游戏,那么我就适合做游戏程序员吗?

作者&#xff1a;黄小斜文章来源&#xff1a;【程序员江湖】游戏在今天的普及度已经不是端游时代可以比肩的了。如今人手一台手机、平板就可以吃鸡、打农药&#xff0c;不仅是男生&#xff0c;也有很多女生加入了游戏圈。相信现在在看文章的你也玩游戏&#xff0c;虽然爱玩的程…

open-falcon_NASA在Falcon 9上带回了蠕虫-其背后的故事是什么?

open-falconYes, that’s right. The classic NASA “worm” logo is back! An image of the revived NASA worm logo was released on Twitter by NASA Administrator Jim Bridenstine as well as press release on the NASA.gov website. NASA explained that original NASA …

听说你对 ES6 class 类还不是很了解

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与。前言在ES5中是原型函数&#xff0c;到了ES6中出现了"类"的概念。等同于是ES5的语法糖&#xff0c;大大提升了编写代码的速度&#xff0c;本文只讲一些常用的&…

《CSS揭秘》读书笔记

摘要 《CSS揭秘》主要是介绍了使用CSS的技巧&#xff0c;通过47个案例来灵活的使用CSS进行实现&#xff0c;同时在实现过程中注重CSS代码的灵活性与健壮性。通过阅读这本书有利于我们编写高质量的CSS代码以及打破使用CSS时的固定思维&#xff0c;能够更加灵活的使用CSS。 《CSS…

一篇文章带你搞懂前端面试技巧及进阶路线

大家好&#xff0c;我是若川。最近有很多朋友给我后台留言&#xff1a;自己投了不少简历&#xff0c;但是收到的面试邀请却特别少&#xff1b;好不容易收到了大厂的面试邀请&#xff0c;但由于对面试流程不清楚&#xff0c;准备的特别不充分&#xff0c;结果也挂了&#xff1b;…

小屏幕 ui设计_UI设计基础:屏幕

小屏幕 ui设计重点 (Top highlight)第4部分 (Part 4) Welcome to the fourth part of the UI Design basics. This time we’ll cover the screens you’ll likely design for. This is also a part of the free chapters from Designing User Interfaces.欢迎使用UI设计基础知…

RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)

在上一章中&#xff0c;我们构建了一个简单的日志系统&#xff0c;我们可以把消息广播给很多的消费者。在本章中我们将增加一个特性&#xff1a;我们可以订阅这些信息中的一些信息。例如&#xff0c;我们希望只将error级别的错误存储到硬盘中&#xff0c;同时可以将所有级别&am…

不用任何插件实现 WordPress 的彩色标签云

侧边栏的标签云&#xff08;Tag Cloud&#xff09;一直是 WordPress 2.3 以后的内置功能&#xff0c;一般直接调用函数wp_tag_cloud 或者在 Widgets 里开启即可&#xff0c;但是默认的全部是一个颜色&#xff0c;只是大小不一样&#xff0c;很是不顺眼&#xff0c;虽然可以用 S…

随时随地能写代码, vscode.dev 出手了

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与。今天偶然看到了 VSCode 官方发布了一条激动人心的 Twitter&#xff0c;vscode.dev[1] 域名上线了&#xff01;image-20211021211915942新的域名 vscode.dev[2] 它是一个…

七种主流设计风格_您是哪种设计风格?

七种主流设计风格重点 (Top highlight)I had an idea for another mindblowing test, so here it is. Since you guys liked the first one so much, and I got so many nice, funny responses and private messages on how accurate it actually was, I thought you will prob…

算法精讲:分享一道值得分享的算法题

分享一道leetcode上的题&#xff0c;当然&#xff0c;居然不是放在刷题贴里来讲&#xff0c;意味着分享的这道题不仅仅是教你怎么来解决&#xff0c;更重要的是这道题引发出来的一些解题技巧或许可以用在其他地方&#xff0c;下面我们来看看这道题的描述。 问题描述 给定一个未…

正几边形可以实现无缝拼接?

正n边形内角为 (n-2)*180/n &#xff0c;要保证可以无缝拼接&#xff0c;就是一个圆可以被整数个n边形内角拼接&#xff0c;即 360k*(n-2)*180/n > 2nk(n-2)。&#xff08;摘自http://blog.csdn.net/ray58750034/article/details/1365813&#xff09; 以下代码表明&#xff…