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)
上一篇 2021年9月5日 上午11:00
下一篇 2021年9月5日 下午12:00


相关推荐

  • [从零开始学DeepFaceLab-4]: 使用-命令行八大操作步骤-第1步:命令行环境准备

    [从零开始学DeepFaceLab-4]: 使用-命令行八大操作步骤-第1步:命令行环境准备目录总体流程 步骤 1 命令行环境准备 1 1 命令 1 clearworkspa bat 必选 2 预备知识 2 1 根目录结构 2 2 internal 目录 2 3workspace 目录 命令行工作目录总体流程 步骤 1 命令行环境准备 1 1 命令 1 clearworkspa bat 必选 1 命令名称 从源视频中提取图片 1 clearworkspa bat 2 Windows 命令源代码 echooffecho

    2026年3月17日
    2
  • USB计算机连接只能充电,手机连接不上电脑只显示充电怎么办[通俗易懂]

    USB计算机连接只能充电,手机连接不上电脑只显示充电怎么办[通俗易懂]有的时候,需要把电脑上的资料传到手机上或者把手机上的一些照片传到电脑上面,但是有时候想要传照片的时候会发现手机与电脑连接在一起的时候只显示出在充电,但是与电脑没有连接在一起,相信很多朋友们都会遇到这样的问题,首先要排除的是手机的数据线没有任何的问题,如果说手机的数据线没有问题的的话那就一定是驱动的问题而引发的,那么今天小编就教大家如果手机为什么连接不上电脑应该怎么办。第一步:如果已经确定了不是数据…

    2022年8月12日
    6
  • BA无标度网络模型构造算法

    BA无标度网络模型构造算法BA 无边度网络模型构造算法 1 增长 从一个具有 m 0 个节点的联通网络开始 每次引入一个新的节点 并且连到 m 个已经存在的节点上 这里 m 2 优先连接 一个新的节点与一个已经存在的节点 i 相连的概率 w 与节点 i 的度 k i 之间的关系为 w k i k 1 k 2 k 3 k n 其中 n 为网络中的节点的总个数 特别的说

    2026年3月18日
    2
  • MVC设计模式总结

    MVC设计模式总结一 概述 nbsp nbsp MVC Modle View Controller 最初应用于桌面程序设计中 是 XeroxPARc 在 20 世纪 80 年代为编程语言 Smalltalk 80 发明的一种软件设计模式 MVC 将系统分解为业务模型 Modle 用户界面即视图 View 控制器 Controller 三部分 每一部分相对独立 职责单一 MVC 的思想实质就是 关注点分离 即将 M 和 V 的实现代码分离 从而

    2026年3月17日
    2
  • 张正友相机标定法原理与实现「建议收藏」

    张正友相机标定法原理与实现「建议收藏」张正友相机标定法是张正友教授1998年提出的单平面棋盘格的相机标定方法。传统标定法的标定板是需要三维的,需要非常精确,这很难制作,而张正友教授提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就可以。同时也相对于自标定而言,提高了精度,便于操作。因此张氏标定法被广泛应用于计算机视觉方面。…

    2022年5月8日
    51
  • 再见 Claude Code!玩转 CodeX CLI 的 16 个实用小技巧,效率拉满!!

    再见 Claude Code!玩转 CodeX CLI 的 16 个实用小技巧,效率拉满!!

    2026年3月16日
    1

发表回复

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

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