“如果”合并/避免嵌套

"If" consolidation/avoiding nesting

本文关键字:嵌套 合并 如果      更新时间:2023-09-26

我真的想避免嵌套在这个代码片段中......

deal_trade_in_model_1 = document.getElementById('deal_trade_in_model_1').value;
deal_trade_in_amount_1 = document.getElementById('deal_trade_in_amount_1').value;
if (typeof deal_trade_in_model_1 !== 'undefined' && deal_trade_in_model_1 !== null) {
    console.log(deal_trade_in_amount_1);
    console.log(deal_trade_in_model_1);
        if (deal_trade_in_model_1 !== null || deal_trade_in_model_1 !== "") {
            if (deal_trade_in_amount_1 == null || deal_trade_in_amount_1 == "") {
                console.log('entered into function');
                document.getElementById("deal_trade_in_model_1").value = "";
                document.getElementById("deal_trade_in_amount_1").value = "";
    }
}
}

基本上,这个函数所做的是取两个字段的值......关于他们要知道的事情以及我想对他们做什么:

1)它们不是必需的

2)如果填写了其中一个,另一个必须是

3)如果只填写其中一个,用户点击提交,并调用这部分函数,我想删除它们两个的值。

我试过做一个化合物

&&(和)

||(或)

可恶的是它没有用。

主要问题:摆脱嵌套的最佳方法是什么(我计划这样做两次,只是交换代码)这将是最有效的?我希望最好以尽可能少的 IF 语句来完成此操作。

请注意:如果你经常更改代码,我可能不知道你在说什么......请准备好教我或帮助我学习!

听起来您只想在其中一个字段为空时才想做某事,而不是两个字段都为空。假设这两个元素都是文本字段,.value将始终返回一个字符串。如果字符串为空,将字符串转换为布尔值会导致false,否则true .

所以

Boolean(deal_trade_in_model_1) === Boolean(deal_trade_in_amount_1) 

如果两个字段都有一个值(都将转换为 true )或两个字段都为空(都将转换为 false),则将true

因此,您的代码可以简化为

var model_1 = document.getElementById('deal_trade_in_model_1');
var amount_1 = document.getElementById('deal_trade_in_amount_1');
if (Boolean(model_1.value) !== Boolean(amount_1.value)) {
    model_1.value = "";
    amount_1.value = "";
}