sort排序「建议收藏」

sort排序「建议收藏」Array对象一个方法:sort(),它是用来排序的。用法如下:vararr=[1,65,6,7,12,0];vars=arr.sort();console.log(s);//[0,1,12,6

大家好,又见面了,我是你们的朋友全栈君。

Array对象一个方法:sort(),它是用来排序的。用法如下:

var arr=[1,65,6,7,12,0];
var s=arr.sort();
console.log(s);   //[0,1,12,6,65,7]

 一般这样直接排出来的东西都不是我和我的小伙伴想要的。数组对象直接调用sort()方法,sort()方法把它每一个数组元素都转换为字符串,然后再按照字符编码进行排列

但是,该方法接收一个参数,而且,该参数为一个函数,然后,该函数会接收两个参数分别代表排序比较时的两个元素,并返回一个数值,sort()方法会根据该数值进行排序:

如果函数返回值大于 0 ,就将两个元素位置进行交换,反之则不交换

var arr=[1,65,6,7,12,0];
var s=arr.sort(function(a,b){
  return a-b
});
console.log(s);  //[0,1,5,7,12,65]

这次已经能够对number类型正确排序了。 

其实主要要说的一点是,sort()方法,排序时是这样的:它先把数组的元素两两相比,把小的放前面大的放后面,重复此操作,直到把所有元素都比一轮后才结束,每次比较都生成一个新的数组。如果比较[6,2,4,3,5,1]这个数组,

如下图:

sort排序「建议收藏」

规律是:第一轮(比较数组总数-1)次.以后每轮比较次数再-1,一直比较到(array.length-1)轮。

所以我们知道了sort有参数(函数)时排序原理。

那么,其实它是可以对二维数组及数组里的对象进行排序的。

代码说明一切:

;(function(){

  var a=[[6,4,0],[2,4,3],[5,4,1]];

  console.log(a.sort(
	function(x,y){
	     return x[0] - y[0];
	}
  ))  
})();//[[2,4,3],[5,4,1],[6,4,0]]

  

这是对二维数组里的第一个数组元素进去排序的。返回结果是把整个数组都有移动。而不是单纯的移动第一个元素。

再来看下面一组,数组里是对象的如何排序。命名什么的咱就不care了。

;(function(){
	var b=[
		{
			val:5,
			b:6
		},
		{
			val:4,
			b:8
		},
		{
			val:1,
			b:2
		}
	]
	var sortFun=function(name){
		return function(x,y){
			return x[name]-y[name];
		}
	}
	console.log(b.sort(sortFun('val')));

})();//[{b:2,val:1},{b:8,val:4},{b:6,val:5}]

神奇的是返回结果把把对象里面的元素也排了一遍,但是其实还是按照val的值进行排序的。也是对象整个都移了一下。

如果想要按照中文来排序。其实就是按照拼音的先后顺序来排的。可以用这一个不知名法宝,当当当当当:localeCompare()  该方法在w3school上是这样描述的:

localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。

具体是什么意思,我理解为是按系统设置的某些来判定是按什么排序,如中文,它的用法如下

stringObject.localeCompare(target)

 用stringObject与target进行比较。如果 stringObject 小于 target(即拼音排列在前),则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。这也sor()返回值是一个意思。

;(function(){
	var str="北京的天好蓝哈真的哦";
	str=str.split('');
	console.log(str.sort(function(a,b){
		return a.localeCompare(b);
	}))
})();     //["北", "的", "的", "哈", "好", "京", "蓝", "哦", "天", "真"] 

 把字符串也进行了排序。具体是不是按拼音,我真的不记得拼音是怎么个顺序了。0.0.. 

 


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

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

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


相关推荐

  • nextline函数_Java中的nextline()函数与next()问题

    nextline函数_Java中的nextline()函数与next()问题【写在前面】importJava.util.*;Scannerin=newScanner(http://System.in);【出现的问题】在循环中相连的nextLine();会出现第一个nextLine();跳过的问题.就像这个样子://部分代码for(inti=0;iSystem.out.println();Stringname=in.nextLine();System.o…

    2022年6月6日
    31
  • 人人工势场法

    人人工势场法人工势场法是局部路径规划的一种比较常用的方法。这种方法假设机器人在一种虚拟力场下运动。一、简介如图所示,机器人在一个二维环境下运动,图中指出了机器人,障碍和目标之间的相对位置。 这个图比较清晰的说明了人工势场法的作用,物体的初始点在一个较高的“山头”上,要到达的目标点在“山脚”下,这就形成了一种势场,物体在这种势的引导下,避开障碍物,到达目标点。

    2022年6月15日
    25
  • Mybatisplus 相关操作之 IService BaseMapper ServiceImpl 简单应用

    本篇主要介绍mybatisplus的简单应用这里对mybatisplus中配置遇到的问题及extent、implement所导入的包也为大家方便引入依赖1引入相关依赖依赖只是参考,每人的仓库不同,代码块内容仅作参考<dependencies><dependency><groupId>org.springframework.boot</groupId><artifac

    2022年4月8日
    89
  • 国外破解网站大全

    国外破解网站大全国外破解网站大全http://www.cracks.am(出名破解网站之一,包含各类型破解软件,注冊机等等,更新速度极快)推荐http://cracks.lomalka.ru(一个破解软件,注冊机网站,更新速度快)http://www.crackway.com(一个破解,注冊机网站,更新速度一般)http://cracks4u.us(一个破解软件,注冊机,注冊码储存网站,

    2022年6月3日
    58
  • hibernate教程–快速入门(增删改查)「建议收藏」

    hibernate教程–快速入门(增删改查)「建议收藏」一、Hibernate框架的概述:1.1什么是Hibernate:框架:软件的半成品,完成部分功能代码.Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Se

    2025年6月23日
    2
  • mock测试工具

    mock测试工具什么是mock测试mock常见场景mock常用工具实战1,什么是mock测试mock测试就是对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法2,mock常见场景(1)无法控制第三方系统某接口的返回,返回的数据不满足要求(2)某依赖系统还未开发完成,就需要对被测系统进行测试3,mock常用工具(1)单元测试级别的mock工具:Easymock、jMock、Mockito、UnitilsMock、PowerMock、JMockit等(2)接口测试级别的.

    2022年6月20日
    40

发表回复

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

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