我们可以使if更通用吗?

时间:2019-07-16 18:11:27

标签: javascript

我希望减少这里的行数。我们可以以更通用的方式获得它吗?

if ((method === "T" || method === "M") && !number) {
    alerts.error("Please input phone number")
    return;
}
if (method === "E" && !email) {
    alerts.error("Please input Email")
    return;
}

4 个答案:

答案 0 :(得分:0)

我认为您要查找的是switch / case语句。

通常,您会执行以下操作:

switch(method) {
  case 'T':
  case 'M':
    alerts.error('Please input phone number');
    break;

  case 'E':
    alerts.error('Please input e-mail');
    break;
}

由于您还有其他条件要检查,因此经常翻转开关/案例检查布尔值是很常见的:

switch(true) {
  case (method === 'T' || method === 'M') && !number):
  // etc.
}

答案 1 :(得分:0)

您可以通过多种方式清理此类代码以提高可读性。一种方法是使用布尔变量来更好地描述您的条件。

isNumber = (method === "T" || method === "M") && !number
isEmail = method === "E" && !email

if (isNumber) {
    alerts.error("Please input phone number")
    return;
}
if (isEmail) {
    alerts.error("Please input Email")
    return;
}

答案 2 :(得分:0)

要获得预期的结果,请在main if警报中使用if条件

if (((method === "T" || method === "M") && !number) || ((method === "E" && !email))) {    
    method === 'E'? alerts.error("Please input Email") : alerts.error("Please input phone number")
    return;
}

工作代码示例

function test(){
  method = 'E';
  email = null;
  number = null;

if (((method === "T" || method === "M") && !number) || ((method === "E" && !email))) {    
    method === 'E'? alert("Please input Email") : alert("Please input phone number")
    return;
}
}

test()

答案 3 :(得分:0)

问题似乎与美学有关。如果是这样,则“匹配”成语可能起作用:

var err = method === "T" && !number ? "Please input phone number" 
        : method === "M" && !number ? "Please input phone number" 
        : method === "E" && !email ? "Please input Email" 
        : null;

if(err) return alerts.error(err);