Javascript Node.js简化IF ELSE

时间:2016-03-21 02:14:39

标签: javascript node.js

我已经阅读了stackoverflow中的简写示例,但似乎我找不到我的问题的答案。

在检查null或空时,如何简化“if else”

var firstName = object.firstName || '',
lastName = object.lastName || '';
if (firstName === lastName) {
    return firstName;
} else {
    if (!lastName) {
        return firstName;
    } else if (!firstName) {
        return lastName;
    } else {
        return lastName + ", " + firstName;
    }
}

5 个答案:

答案 0 :(得分:4)

您的代码没有任何问题。

我的个人风格是通过在同一行放置单个语句if块来避免垂直蔓延。您可以在返回时省略else

if (firstName === lastName) return firstName;
if (!lastName) return firstName;
if (!firstName) return lastName;
return lastName + ", " + firstName;

您还可以合并返回firstName的案例:

if (firstName === lastName || !lastName) return firstName;
if (!firstName) return lastName;
return lastName + ", " + firstName;

或者,您可以使用换行符链接三元运算符:

return firstName === lastName || !lastName ? firstName : 
  !firstName ? lastName : 
  lastName + ", " + firstName;

首先处理常见案例可能会更好地表达您的意图,之后您只需返回lastNamefirstName中的任何一个:

if (firstName && lastName) return lastName + ", " + firstName;
return lastName || firstName;

答案 1 :(得分:3)

如果您要从该功能返回,则不需要顶级else;你可以只是短路并尽早返回,否则这可以简化一点但仍然很可读,我想:

var firstName = object.firstName
var lastName = object.lastName

if (!lastName || firstName === lastName) {
    return firstName
}

return firstName ? [lastName, firstName].join(', ') : lastName

如果既没有设置,也可能想要预先设置一些内容,例如if (!firstName || !lastName) return 'unknown'等;否则你将返回undefined,这可能是你想要的。

首先使用数组可能更容易:

var name = []

if (object.lastName) name.push(object.lastName)
if (object.firstName) name.push(object.firstName)

return name.join(', ')

或者你可能会因此而变得古怪:

var name = ['lastName', 'firstName'].map(function (key) {
   if (object.hasOwnProperty(key)) {
       return object[key]
   }
})

return name.filter(Boolean).join(', ')

但我认为,这比简单的案例更难以遵循意图。有嵌套三元组的方法可以做到这一点,但我真的发现一个难以阅读的嵌套三元组;对我来说,添加一些线条并且明确易懂是比较好的。

答案 2 :(得分:0)

我没有看到任何从逻辑角度“简化”它的真正理由,但你可以通过简单地早点返回来减少它。根据您的需要,您也会遇到逻辑错误。

如果我的名字是“James James”怎么办? (我问,因为我认识一个名叫那的人。)

为什么不把所有东西放在一个单一的水平上?超级易读,您确切知道何时以及为何返回,如果您了解自己的情况并且看到return,则可以停止查看代码?

大致是:

var firstName = object.firstName || ''
  , lastName  = object.lastName  || ''
  ;

if (firstName === lastName) {
  return firstName;
} 

if (!lastName) {
  return firstName;
}

if (!firstName) {
  return lastName;
}

return lastName + ", " + firstName;

如果你真的不想和我的朋友詹姆斯詹姆斯混在一起,你可能会侥幸逃脱:

if (!firstName || !lastName) {
  return firstName || lastName;
}

return lastName + ", " + firstName;

(我没有测试过,看起来可能很接近。)

答案 3 :(得分:0)

我认为,在分配过程中可以执行其中一个条件。

这看起来不简单:

var firstName = object.firstName,
    lastName = object.lastName || firstName;

if(!firstName || firstName === lastName) return lastName;

return lastName + "," + firstName;

答案 4 :(得分:0)

我喜欢torazaburo的第二个答案,但我可能会将括号保留为我以前的风格。你被告知代码太长",这可能没什么帮助,至少它有点神秘。作为一名JS开发人员,我非常高兴看到以下几行代码(假设您的业务逻辑合理):

if (firstName === lastName || !lastName) {
  return firstName;
} else if (!firstName) {
  return lastName
}
return lastName + ", " + firstName;