1、简单分支优化
实际项目中,我们可能遇到这样的代码:
if (appealType === '1') {
appealTypeName = '咨询类'
} else if (appealType === '2') {
appealTypeName = '求助类'
} else if (appealType === '3') {
appealTypeName = '建议类'
} else if (appealType === '4') {
appealTypeName = '投诉类'
} else if (appealType === '5') {
appealTypeName = '表扬类'
} else if (appealType === '6') {
appealTypeName = '骚扰类'
} else {
appealTypeName = '通用类'
}
这么一看,感觉没什么异常,但是如果有100个条件判断?按照这种写法,要写100个if分支?
优化上面代码结构:
function getAppealTypeName(type) {
const appealTypeNameMap = {
1: ()=> appealTypeName = '咨询类',
2: ()=> appealTypeName = '求助类',
3: ()=> appealTypeName = '建议类',
4: ()=> appealTypeName = '投诉类',
5: ()=> appealTypeName = '表扬类',
6: ()=> appealTypeName = '骚扰类',
};
appealTypeNameMap[type] ? appealTypeNameMap[type]() : appealTypeName = '骚扰类';
}
2、复杂分支优化
如果遇到如下的复杂判断,应该如何优化
function getAppealTypeName(name) {
if (name.length > 4) {
appealTypeName = '咨询类'
} else if (name.length < 2) {
appealTypeName = '求助类'
} else if (name[0] === '建议') {
appealTypeName = '建议类'
} else if (name[0] === '投诉' && name[0] !== '建议类') {
appealTypeName = '投诉类'
} else if (name === 'good') {
appealTypeName = '表扬类'
} else if (name[1] === 'bad' && name[1].dec === '骚乱') {
appealTypeName = '搔痒类'
} else {
appealTypeName = '通用类'
}
}
引入二维数组来进行分支优化
function getAppealTypeName(name) {
const appealTypeNameMap = [
[
(name) => name.length > 4,
() => appealTypeName = '咨询类'
],
[
(name) => name.length < 2,
() => appealTypeName = '求助类'
],
[
(name) => name[0] === '建议',
() => appealTypeName = '建议类'
],
[
(name) => name[0] === '投诉' && name[0] !== '建议类',
() => appealTypeName = '投诉类'
],
[
(name) => name === 'good',
() => appealTypeName = '表扬类'
],
[
(name) => name[1] === 'bad' && name[1].dec === '骚乱',
() => appealTypeName = '搔痒类'
]
]
// 获取符合条件的子数组
const getAppealType = appealTypeNameMap.find((item) => item[0](name));
// 子数组存在则运行子数组中的第二个元素(执行函数)
getAppealType ? appealTypeName = getAppealType[1]() : appealTypeName = '通用类';
}