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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Bean @session_spring类方法注解

    Bean @session_spring类方法注解刚开始的时候,在controller层使用@RequestParam的时候,发现这个参数是必须要输入值的,但是我们有时候必须查询的时候允许参数为空,使用这个注解就不行了。在集成了swagger2后,找了半天的原因,发现使用@ApiImplicitParam这个注解可以解决这个问题。对应下面的参数。所以我们可以使用这个注解来解决我们所遇到的参考为空的问题。而且已经集成了swagger2,所以我们尽量…

    2025年8月8日
    2
  • 用Python发免费短信的正确姿势

    用Python发免费短信的正确姿势前言今天带大家来玩一玩,如何用Python来实现免费短信。关于发短信,其实适用场景还挺多的。只有你想不到的场景,没有玩不转的场景!比如作为一个IT人员,经常会有监控服务器之说,那么自动告警的短信或者来电就显得非常重要了。再比如,你可以用发短信的功能,自己来实现一个温馨天气预报提示给你的爸爸妈妈。。。等等下面进入今天的主题-twilio网站。https://www.twilio.com/console准备工作先来介绍下这个网站主要用于发短信和来电,提供了完备的相关api。而

    2022年5月1日
    53
  • 如何更换及调整csdn头像

    如何更换及调整csdn头像

    2021年7月17日
    80
  • java异常return在finally前面_java 异常处理

    java异常return在finally前面_java 异常处理java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用异常处理2种方法:1.抛 (throws)2.自己处理try/catch/finally1.抛出:向上一级抛出,异常实际没有被解决掉2.try/catch/finally(1)正常执行public class Test1 { public static void main(String[] args) { Test1 test1 = new Test1(); test

    2022年8月8日
    4
  • 简单令牌桶实现

    简单令牌桶实现主要思路:1.创建channel,通过定时器定时往channel中写入令牌,返回令牌桶本身(channel);2.判断请求是否可以拿到令牌;packagemainimport(&quot

    2022年7月2日
    26
  • Redis版本5.0.5安装

    这篇文章主要讲解Redis安装,以后的文章我会对Redis做一个详细介绍,已经Redis应用。1.解压压缩包tar-zxvfredis-5.05.tar.gz2.安装gccyuminstallgcc检查gcc安装是否成功rpm-qa|grepgcc3.进入文件夹make安装cdredis-5.0.5makeMALLOC=libc4.后台运行redissrc/redis-server&检查redis服务启动情况..

    2022年4月8日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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