多重排序 js「建议收藏」

多重排序 js「建议收藏」如何做到多重排序js有一个sort排序函数,使用array.sort(function)传入排序函数就可以很做到排序array.sort((a,b)=>{returna-b;})注意一点就是返回结果决定了a和b的位置,如果返回结果<0,那么a排在b的前面返回结果=0a和b的相对位置不变返回结果>0b排在a的前面现在让你对学生成绩单进行排序,先按照学号,从小到大…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

如何做到多重排序

js有一个sort排序函数,使用array.sort(function)传入排序函数就可以很做到排序

array.sort((a,b)=>{ 
   
return a-b;
})

Jetbrains全家桶1年46,售后保障稳定

注意一点就是返回结果决定了a和b的位置,

  • 如果返回结果<0 ,那么a排在b的前面
  • 返回结果 = 0 a 和b的相对位置不变
  • 返回结果>0 b排在a的前面

游戏中的背包列表排序

对游戏中的背包来说,背包里有武器和饰物,先按照类型,(武器还是饰物),然后按照武器一类下按品质,然后按照等级,等级一样按照id,最后是按照数量进行排序
类型 =>品质 =>等级 =>id =>num
例如类型有两种 3是武器,4是饰物 武器在前,饰物在后
品质有5个等级 1到5,从高到低排序
id相同时,数量多的在前列

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}

武器->饰物 type

品质 从高到低排序 quality

等级从高到低 level

装备id从大到小排序

id相同数量多的在前列 num

现在我们写一个排序


sortZhuangBei(a,b){ 
   
//先判断类型
	if(a.type ==b.type){ 
   
	//类型一样就继续判断品质是否相同
		if(a.quality==b.quality){ 
   
		//==同理 等级相同就继续判断id是否相同
			if(a.level ==b.level){ 
   
				//==同理 id相同就继续判断数量是否相同
				if(a.id ==b.id){ 
   
					return b.num-a.num;
				}else{ 
   
				return  a.id-b.id;
				}
			}
			else{ 
   
			return b.level -a.level;
			}
		
		}else{ 
   
		// 品质从高到低排序 a.quality= 4,b.quality=5 返回结果>0
		// 返回结果>0 b排在a的前面
		return b.quality -a.quality; 
		}
	}
	else{ 
   
	/*类型不一样就安照从小到大 如果返回结果<0 ,那么a排在b的前面, 如果a.type =3, b.type =4 返回值小于0 武器会排在饰物前面*/
	return a.type-b.type
	}
}

上面的写法,if else嵌套过深,需要优化一下,去除else

    sortByZhuangBei(a: any, b: any) { 
   
        if (a.type != b.type) return a.type - b.type;
        if (a.quality != b.quality) return b.quality - a.quality;
        if (a.level != b.level) return a.level - b.level;
        if (a.id !== b.id) return a.id - b.id;
        return b.num - a.num;
    }

比较时如果a.type!=b.type,那么意味着a.type ==b.type,
我们需要继续往下考虑第二个条件,quality是否相同,
如果a.quality!=b.quality,就意味着a.quality ==b.quality,
那么就要继续往下判断,直到最后一个条件a.id!==b.id,
那么就意味着a.id ===b.id就要对id进行排序
这样就去除多余的else,代码也很简洁

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

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

(0)
上一篇 2025年6月15日 下午7:22
下一篇 2025年6月15日 下午8:01


相关推荐

  • 史上最全的Java&Android面试题搜集整理

    史上最全的Java&Android面试题搜集整理最近在忙着准备面试,所以从全网搜集了一下java和android相关的面试题目,应该能够包含80%以上的试题吧~如果大家还有一些比较全面优质的题目资源,欢迎告知,我会继续补充进来,以便于更多同学可以从中获益。android性能优化系列 http://www.trinea.cn/android/performance/2016JAVA与Android面试题整理 http://www.no

    2022年5月21日
    51
  • Vue文件上传问题合集

    Vue文件上传问题合集目录1.背景2.环境3.问题集1)文件上传完成后,文件名的回显2)文件上传完成前的加载状态3)文件上传作为必填项1.背景在使用Vue+ElementUI进行前端工程开发中,遇到一些文件上传的问题,包括上传、回显、等待等。这里做一些记录,方便以后查看2.环境npm 6.14.12 vue-admin-template 4.4.0 axios 0.18.1 element-ui 2.13.2 3.问题集1)文件上传完成后,文件名

    2022年8月16日
    7
  • 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量

    秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量前面《秒杀多线程第四篇一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》《秒杀多线程第八篇经典线程同步信号量Semaphore》来详细介绍常用的

    2022年7月15日
    17
  • N8n Merge 节点详解

    N8n Merge 节点详解

    2026年3月15日
    2
  • windows10、windows11无法连接到打印机,错误代码0x0000011b,不删 KB5005565更新的解决办法,亲测可行[通俗易懂]

    windows10、windows11无法连接到打印机,错误代码0x0000011b,不删 KB5005565更新的解决办法,亲测可行[通俗易懂]共享打印机连接失败,提示错误代码0x0000011b此故障可能是由于windows10九月累积更新KB5005565导致的,网上很多方法都是直接卸载更新。但我碰到这种情况,开始打印不了,按网上方法卸载了更新,可以了;但没过多久,又打印不了,而且再去找更新的时候,发现没有那个更新。于是又在度娘找解决方案,大部份都是卸载更新,找了很久,终于发现有位兄弟(知乎账号:afudos)提出不同的解决方法,亲测有效,万分感谢这位兄台,现转载分享给大家。第一步:在安装了打印机的电脑上点运行(wi.

    2025年10月19日
    8
  • java代码是怎么运行的_java代码是什么

    java代码是怎么运行的_java代码是什么1.Java代码有很多不同的运行方式1)可以在开发工具中运行2)可以双击执行jar文件运行,3)也可以在命令行中运行4)甚至可以在网页中运行这些执行方式都离不开JRE,也就是Java的运

    2022年8月1日
    5

发表回复

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

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