JavaScript 复杂判断的更优雅写法

原文链接:https://mp.weixin.qq.com/s/6n78aHGPl4bNkka47kQWXQ

前提

我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题, 随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃肿,越来越看不懂,那么如何更优雅的写判断逻辑,本文带你试一下

举个栗子

/**
 *  按钮点击事件
 *  @param{number} status 活动状态: 1 开团进行中  2 开团失败 3 商品售罄 4 开团成功 5 系统取消  
 */

const onButtonClick = (status) => {
	if(status == 1) {
		sendLog('processing');
		jumpTo('IndexPage')
	} else if(status == 2) {
		sendLog('fail');
		jumpTo('FailPage')
	} else if(status == 3) {
		sendLog('fail');
		jumpTo('FailPage')
	} else if(status == 4) {
		sendLog('success');
		jumpTo('SuccessPage')
	} else if(status == 5) {
		sendLog('cancel');
		jumpTo('CancelPage')
	} else {
		sendLog('other');
		jumpTo('Index')
	}
}

通过代码可以看到这个按钮的点击逻辑:根据不同活动状态做两件事情,发送日志埋点和跳转到对应页面

switch:

/**
 *  按钮点击事件
 *  @param{number} status 活动状态: 1 开团进行中  2 开团失败 3 商品售罄 4 开团成功 5 系统取消  
 */

const onButtonClick = (status) => {
	switch(status){
        case 1:
		    sendLog('processing');
		    jumpTo('IndexPage')
            break;
	     case 2:
	     case 3:
		    sendLog('fail');
	    	jumpTo('FailPage');
            break;
	     case 4:
		    sendLog('success');
		    jumpTo('SuccessPage')
            break;
	     case 5:
		    sendLog('cancel');
		    jumpTo('CancelPage')
            break;
	     default:
		    sendLog('other');
		    jumpTo('Index')
            break;
	}
}

更简单写法:

const actions={
    '1':['processing','IndexPage'],
    '2':['fail','FailPage'],
    '3':['fail','FailPage'],
    '4':['success','SuccessPage'],
    '5':['cancel','CancelPage'],
    'default':['other','Index']
}
/**
 * 按钮点击事件
 * @param {number} status 活动状态:1开团进行中 2开团失败 3 商品售罄 4 开团成功 5 系统取消
 */
const onButtonClick=(status)=>{
    let action = actions[status]||actions['default'],
        logName=action[0],
        pageNameaction[1]

    sendLog(logName)
    jumpTo(pageName)
}

上面的方法在于:将判断条件作为对应的属性名,将处理逻辑作为对象的属性值,再按钮点击的时候,通过对象属性查找的方式来进行逻辑判断,这种写法特别适合一元条件判断的情况

 

其他方式:

const actions=new Map([
    [1,['processing','IndexPage']],
    [2,['fail','FailPage']],
    [3,['fail','FailPage']],
    [4,['success','SuccessPage']],
    [5,['cancel','CancelPage']],
    ['default'['other','Index']]
])
/**
 * 按钮点击事件
 * @param {number} status 活动状态:1 开团进行中 2 开团失败 3 商品售罄 4 开团成功 5 系统取消
 */
const onButtonClick=(status)=>{
    let action = actions.get(status)||actions.get('default')
    sendLog(action[0])
    jumpTo(action[1])
}

这样写用到了es6里的Map对象

Map对象和Object对象有什么区别?

1、一个对象通常都有自己的原型,所以一个对象总有一个“prototype”键。

2、一个对象的键只能是字符串或者Symbos,但一个Map的键可以是任意值。

3、可以通过size属性很容易得到一个Map的键值对个数,而对象的键值对个数只能手动确认

很好的问题!在 JavaScript 中,可以使用逻辑或运算符(“||”)将多个条件组合起来,实现多重判断的功能。同时,为了确保代码的可读性和代码风格的美观,可以使用一些技巧来编写优雅的多重判断语句。 以下是几种值得推荐的写法: 1. 使用默认值:在变量赋值时,使用逻辑或运算符“||”,将变量原值和一个默认值作为两个操作数,如果变量原值是假值(false、null、undefined、0、NaN、""),则将默认值赋给变量,否则将原值作为变量的值。这种写法可以避免使用 if 语句进行多重判断。 例如: ```javascript // 简单示例 var foo = bar || 0; // 多重判断示例 var value = option1 || option2 || option3 || defaultOption; ``` 2. 使用三元运算符:在变量赋值时,使用三元运算符(“?:”),将多重判断转换为一条语句。这种写法可以在某些情况下提高代码的可读性,尤其是只有两个选项的场合。 例如: ```javascript // 简单示例 var result = condition ? value1 : value2; // 多重判断示例 var result = option1 ? value1 : (option2 ? value2 : (option3 ? value3 : defaultValue)); ``` 3. 使用数组方法:将多个选项放在一个数组中,然后使用数组方法来进行多重判断。这种写法可以让代码加简洁、易读。 例如: ```javascript // 简单示例 var maxNumber = Math.max.apply(null, numberArray); // 多重判断示例 var value = [option1, option2, option3].find(Boolean) || defaultValue; ``` 希望这些写法对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值