复杂判断简单化

条件判断还在使用if-else或者switch?是时候换换口味了。

一、一元判断

A、if-else

if (status == 'signIn') {
	sendLog('processing');
	loadScene('hall');
} else if (status == 'init') {
	sendLog('processing');
	loadScene('hall');
} else if (status == 'join') {
	sendLog('success');
	loadScene('mainScene');
} 

B、switch

switch (status) {
	case 'signIn': 
	case 'init':
		sendLog('processing');
		loadScene('hall');
		break;
	case 'join':
		sendLog('success');
		loadScene('mainScene');
		break;
}
// 公共函数
let sendLog   = (status) => {console.log(`状态${status}`);};
let loadScene = (name)   => {console.log(`场景名称${name}`);};
1、把判断条件作为对象的属性,根据对象属性(状态)来拿取函数中所需参数
const obj = {
	'signIn': ['processing','hall']  ,
	'init'  : ['processing','hall']  ,
	'join'  : ['success','mainScene']
}
const Fn = (status) => {
	sendLog(obj[status][0]);
	loadScene(obj[status][1]);
}
Fn('init');
2、把判断条件作为Map的key值,根据key拿取对应的函数参数
const map = new Map([
	['signIn',['processing','hall']] ,
	['init'  ,['processing','hall']] ,
	['join'  ,['success','mainScene']]
]);
const Fn = (status) => {	
	let param = map.get(status);
	sendLog(param[0]);
	loadScene(param[1]);
}
Fn('join');

二、多元判断

if (cc.weijifen.chonglian == 'CL') {
	if (status == 'init') { } else 
	if (status == 'join') { } else 
	if (status == 'over') { } else 
                          { };
} else if (cc.weijifen.chonglian == 'FCL') {
	if (status == 'init') { } else 
	if (status == 'join') { } else 
	if (status == 'over') { } else 
                          { };
}
1、把条件拼接成字符串存到Object、Map中;

(1)条件存在Object中

const handlers = {
	'CL_init' : ()=>{console.log('CL_init')},
	'CL_join' : ()=>{console.log('CL_join')},
	'CL_over' : ()=>{console.log('CL_over')},
	'FCL_init': ()=>{console.log('CL_init')},
	'FCL_join': ()=>{console.log('CL_join')},
	'FCL_over': ()=>{console.log('CL_over')}
};
const Fn = (area,status) => {
	var fn = handlers[`${area}_${status}`];
	fn.call(this);
}
Fn('FCL','init');

(2)条件存在Map中

const handlers = new Map([
	['CL_init' , ()=>{console.log('CL_init')}],
	['CL_join' , ()=>{console.log('CL_join')}],
	['CL_over' , ()=>{console.log('CL_over')}],
	['FCL_init', ()=>{console.log('CL_init')}],
	['FCL_join', ()=>{console.log('CL_join')}],
	['FCL_over', ()=>{console.log('CL_over')}]
]);
const Fn = (area,status) => {
	var fn = handlers.get(`${area}_${status}`);
	fn.call(this);
}
Fn('CL','over');
2、将条件写为正则存在Map中

利用数组循环的特性,符合正则条件的逻辑会被执行,同时可以执行公共逻辑和单独逻辑。

const CLFn     = () => {console.log('CLFn')};
const FCLFn    = () => {console.log('FCLFn')};
const CommonFn = () => {console.log('CommonFn ')};
const handlers = new Map([
		[/^CL_init$/ ,CLFn     ],
		[/^CL_over$/ ,CLFn     ],
		[/^FCL_init$/,FCLFn    ],
		[/^FCL_over$/,FCLFn    ],
		[/init$/     ,CommonFn ],
	]);

const Fn = (area,status) => {
	let action = [...handlers].filter(([key,value]) => {
		let res = key.test(`${area}_${status}`);
		return res;
	});
	action.forEach(([key,value]) => value.call(this));
}
Fn('FCL','init');

Objact、Map区别:
https://blog.csdn.net/jiuwanli666/article/details/79072829

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值