Js中sort()方法

Js中sort()方法

如果有个纯数字数组要用js排序:

代码:

var arr=[3,2,1,4,6,5];
document.writeln(arr.sort());

结果:1,2,3,4,5,6

可见,sort()按照升序排列,但当数组元素是大于1位的数字时:

代码:

var arr=[3,2,1,4,6,5,11,12,13,14,15];
document.writeln(arr.sort());

结果:1,11,12,13,14,15,2,3,4,5,6

既非升序也非降序why?

因为元素是按照 ASCII 字符顺序进行升序排列。

sort()方法其实是可以带参数的(现实场景中几乎是必须要要带参数),参数为一个自定义函数名,且这个自定义函数默认有2个参数,分别代表每次排序比较时的两个数组项。自定义函数的返回值决定了,作为参数的2个数组项的排列顺序:

小于0,升序,a前b后,a<b

大于0,降序,a后b前,a>b

利用这个自定义函数可以让数组项按照需求来排序:

代码:

var arr=[3,2,1,4,6,5,11,12,13,14,15];
function fn(a,b) {
	if(a<b){
		return -1;
	}else if(a>b){
		return 1;
	}else{
		return 0
	}
}
document.writeln(arr.sort(fn));

结果:1,2,3,4,5,6,11,12,13,14,15

由此我们实现了对1位以上数字的升序排序,上面方法稍作调整即可实现降序:

代码:

var arr=[3,2,1,4,6,5,11,12,13,14,15];
function fn(a,b) {
	if(a>b){
		return -1;
	}else if(a<b){
		return 1;
	}else{
		return 0
	}
}
document.writeln(arr.sort(fn));

结果:15,14,13,12,11,6,5,4,3,2,1


上面的自定义方法if语句:

a>b

可不可以写成:

a-b>0

只做数字排序就行,非数字就垮了。

代码精简下,可以用三目运算符,等于0的情况基本可以不考虑:

var arr=[+5,+6,+3,-2,-1,-6,-3];
arr.sort(function(a,b){return a<b?1:-1});
arr.sort(function(a,b){return a>b?1:-1});

参考:http://my.oschina.net/u/727394/blog/367436


有时,数组对象不是简单的数字或字符串,而是一个对象,我们要依赖对象中的某个字段排序怎么办

代码:

var data = [
{ name: "Tom", age: 22 }, 
{ name: "Peter", age: 21 }, 
{ name: "Lucy", age: 25}
]; 
function compare(propertyName) { 
	return function (object1, object2) { 
		var value1 = object1[propertyName]; 
		var value2 = object2[propertyName]; 
		if (value2 < value1) { 
			return -1; 
		}else if (value2 > value1) { 
			return 1; 
		}else { 
			return 0; 
		} 
	} 
} 
data.sort(compare("age")); 
console.log(data);

结果:

205518_3kQJ_1267040.png

用一个自定义函数返回一个函数的方式,我们的自定义方法接受了3个参数,而不是2个。此方法是网上找的,感觉真的很精巧。此方法也可以用三目运算符进一步简写:

function compare(propertyName) { 
	return function (object1, object2) { 
		return object1[propertyName]>object2[propertyName]?1:-1;
	} 
}

参考:http://my.oschina.net/code33/blog/384085

转载于:https://my.oschina.net/710409599/blog/404065

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109481.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • navicat 激活码【2021免费激活】

    (navicat 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS32PGH0SQB-eyJsa…

  • PyCharm professionl2021激活码【在线破解激活】

    PyCharm professionl2021激活码【在线破解激活】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Windows留后门–教程(五)——shift粘贴键后门

    Windows留后门–教程(五)——shift粘贴键后门一、shift粘贴键后门介绍Shift粘滞键是当用户连按5次shift就会自动弹出的一个程序,其实不光是粘滞键,还有各种辅助功能,这类辅助功能都拥有一个特点就是当用户未进行登录时也可以触发。所以攻击者很有可能通过篡改这些辅助功能的指向程序来达到权限维持的目的。(辅助功能镜像劫持是一样的原理)二、shift粘贴键后门-教程前提条件:假设在攻击的过程中通过利用各种getshell,已经拿到目标服务器administrator权限靶机:windowsServer2012IP:192.168.2

  • 南京字节跳动公司招聘_字节跳动入职期权有多少

    南京字节跳动公司招聘_字节跳动入职期权有多少1.前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper到底有啥用不?如果别人/面试官让你给他讲讲对于ZooKeeper的认识,你能回答到什么地步呢?拿我自己来说吧!我本人曾经使用Dubbo来做分布式项目的时候,使用了ZooKeeper作为注册中心。为了保证分布式系统能够同步访问某个资源,我还使用ZooKeeper做过分布式锁。另外,我在学习Kafka的时候,知道Kafka很多功能的实现依赖了ZooKeeper。前几天,总结项目经验的时候,

  • dm268_实时的意思

    dm268_实时的意思最近正好又用到DM368开发板,就将之前做的编解码的项目总结一下。话说一年多没碰,之前做的笔记全忘记是个什么鬼了。还好整理了一下出图像了。不过再看看做的这个东西,真是够渣的,只能作为参考了。项目效果就是,编码encode然后通过rtsp传输在VLC上实时播放。用的是sensor是 MT9P031。一、内核配置让其支持MT9P031二、硬件设计错误排查启动信息错误,无法检测到MT9

  • CI框架下 新浪微博登录接口完整版

    CI框架下 新浪微博登录接口完整版

    2021年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号