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,之后你可以简单地返回lastNamefirstName任何一个:

 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;