多重排序 js

如何做到多重排序

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

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

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

  • 如果返回结果<0 ,那么a排在b的前面
  • 返回结果 = 0 a 和b的相对位置不变
  • 返回结果>0 b排在a的前面
游戏中的背包列表排序

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

武器->饰物 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,代码也很简洁

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值