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


相关推荐

  • YUI3学习(一)—入门

    YUI3学习(一)—入门   学习YUI3有一段时间,并且应用在了一些项目的前端开发中,感觉还是蛮不错的,所以决定开始记录下YUI3的学习历程和个人经验。   YUI3在前身YUI2基础上进行了大量的重新设计,并不只是简单的版本升级。YUI3强调代码重用,将功能做了级别划分和颗粒化的设计。在概念上抽象出核心、工具、和组件类,分别放在不同的目录结构中,需要的时候自行去引用。为动态加载的框架设计做铺垫。YUI3…

    2022年7月12日
    24
  • IDEA + Groovy脚本一键生成实体类,用法舒服,高效!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:悲凉的秋风 blog.csdn.net/qq_34371461/article/details/8057128…

    2021年6月27日
    93
  • 坑爹的MongoDB

    坑爹的MongoDB

    2021年9月7日
    57
  • GridBagLayout 以及 GridBagConstraints 用法「建议收藏」

    GridBagLayout 以及 GridBagConstraints 用法「建议收藏」GridBagLayout是一个灵活的布局管理器,部件如果想加入其中需借助GridBagConstraints,其中有若干个参数,解释如下:gridx/gridy:组件的横纵坐标gridwidth:组件所占列数,也是组件的宽度gridheight:组件所占行数,也是组件的高度fill:当组件在其格内而不能撑满其格时,通过fill的值来设定填充方式,有四个值

    2022年9月10日
    0
  • quotedStr() 应用–DELPHI「建议收藏」

    quotedStr() 应用–DELPHI「建议收藏」varcsql,cstr:string;begin//quotedStr(edit1.text)以说是在sql查询分析器里给字符串edit1.text加个单引号,可以完全抛开delphi的语法.cStr…

    2022年10月17日
    0
  • javascript运算符的优先级

    最基木的运算符优先级就是所谓的“先乘除,后加减”。对于优先顺序处于同一层次上的运算符,按照从左到右出现的顺序计算。下面给出javascript定义的所有运算符的优先级。运算符优先顺序成员选择、括号、

    2021年12月21日
    40

发表回复

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

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