Javascript Node.js简化IF ELSE
我已经阅读了在计算器中的速记例子,但似乎我无法find我的问题的答案。
在检查空或空时,如何简化这个“如果其他” ?
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; } }
你的代码没有问题。
我个人的风格是通过在同一行放置单个语句来避免垂直蔓延。 你也可以省略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;
你的意图可以通过首先处理常见的情况来更好地expression,之后你可以简单地返回lastName
或firstName
任何一个:
if (firstName && lastName) return lastName + ", " + firstName; return lastName || firstName;
如果你要从函数返回,你不需要顶层的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(', ')
但是,我认为,比起简单的情况来说,更难以遵循这个意图。 有三种方法可以嵌套三元组,但是我真的发现一个嵌套的三元组难以阅读; 对我来说,最好是增加一些线条,并明确和可以理解。
我没有看到任何真正的理由来从逻辑的angular度来“简化”它,但是你可以通过早点回归来使它变得不那么多。 你也有一个逻辑错误,这取决于你的需要。
如果我的名字是“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;
(我没有testing,似乎可能会接近。)
我喜欢torazaburo的第二个答案,但我可能会保留括号,因为这是我习惯的风格。 你“被告知代码太长”,这可能是没有帮助的build议,至less有点神秘。 作为一个JS开发人员,我很高兴看到下面的代码行(假设你的业务逻辑是正确的):
if (firstName === lastName || !lastName) { return firstName; } else if (!firstName) { return lastName } return lastName + ", " + firstName;
我认为,其中一个条件可以在任务本身进行。
这看起来不简单:
var firstName = object.firstName, lastName = object.lastName || firstName; if(!firstName || firstName === lastName) return lastName; return lastName + "," + firstName;