条件判断还在使用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