我已经阅读了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;
}
}
答案 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;
首先处理常见案例可能会更好地表达您的意图,之后您只需返回lastName
或firstName
中的任何一个:
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;