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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Do not use lsnrctl and sqlplus as SYSDBA in RAC

    Do not use lsnrctl and sqlplus as SYSDBA in RAC

    2022年3月12日
    45
  • Lucene 3.0.0 的TokenStream与Analyzer

    Lucene 3.0.0 的TokenStream与Analyzer如果你看的Lucene相关的书是很老版本的,比如说2.4或者更早,那么对于这个版本中的Analyzer可能就不那么容易接受了,我也是看的<lucene分析与应用>这本书,比较古老的版本.今天读了一下源代码,大概说说心得,我从SimpleAnalyzer说起.SimpleAnalyzer的作用就是把一段字符串中除了符号和非文字的内容作为分…

    2022年7月22日
    11
  • 智能优化算法:麻雀搜索算法-附代码「建议收藏」

    2020智能优化算法:麻雀搜索算法-附代码文章目录2020智能优化算法:麻雀搜索算法-附代码1.算法原理2.算法结果3.参考文献4.Matlab代码摘要:麻雀搜索算法(SparrowSearchAlgorithm,SSA)是于2020年提出的。SSA主要是受麻雀的觅食行为和反捕食行为的启发而提出的。该算法比较新颖,具有寻优能力强,收敛速度快的优点1.算法原理建立麻雀搜索算法的数学模型,主要规则如下所述:发现者通常拥有较高的能源储备并且在整个种群中负责搜索到具有丰富食物的区域,为所有的加

    2022年4月9日
    48
  • mysql 数据库连接_java连接oracle数据库

    mysql 数据库连接_java连接oracle数据库原理:Oracle数据网关,就像一个桥梁,贯通oracle数据库和non-oracle数据库。在配置过程中,我们经常讲到的三个重要文件:第一、tnsnames.ora;第二、lisener.ora;第三、init.ora。他们是如何工作呢?比如对一个连接数据库的查询,select*from“tablename”@linkdbname;oracle首先从linkdbname开始,通过dba_d…

    2022年9月14日
    1
  • 图解什么是一致性哈希算法

    图解什么是一致性哈希算法作者|LemonCoder来源|后端技术学堂(ID:lemon10240)很多同学应该都知道什么是哈希函数,在后端面试和开发中会遇到「一致性哈希」,那么什么是一致性哈希呢?名字听…

    2022年7月27日
    6
  • HTML 动画(一)[通俗易懂]

    HTML 动画(一)[通俗易懂]入场动画(一)图片从左至右逐渐消失实现逻辑:a:将遮罩分割为数个div,多个div通过图片定位拼接成一张图片;b:运用requestAnimationFrame+animation实现动画;c:遮罩层网格状逐步消失设置background-position:0;2.效果图:3.代码:<!DOCTYPEhtml><htmllang=”en”&…

    2022年6月29日
    27

发表回复

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

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