以下代码位于循环中,循环遍历表单的字段。如果isV1User
为true
,则会禁用该字段。如果用户有customSetting
,则不要禁用该字段。如果用户没有,请将其禁用。
if (field.name === 'themeColor') {
if (this.isV1User) {
field.disabled = false
} else {
field.disabled = this.user.customSetting
? !this.user.customSetting.themePicker
: false
}
}
如何简化或至少删除此代码的嵌套?
答案 0 :(得分:3)
将每个if
条件移至三元:
if (field.name === 'themeColor') {
field.disabled = !this.isV1User && this.user.customSetting && !this.user.customSetting.themePicker;
}
答案 1 :(得分:1)
if (field.name === 'themeColor') {
field.disabled = this.user.customSetting && !this.isV1User ?
!this.user.customSetting.themePicker : false;
}
答案 2 :(得分:1)
这不是一个Stack Overflow问题,我认为它更符合Code Review。
似乎只有一组情况需要true
,所以也许这样?
if (field.name === 'themeColor') {
field.disabled = (
!this.isV1User &&
this.user.customSetting && !this.user.customSetting.themePicker);
}
仍需要第一个if
,因为其他字段应保持不变(我假设)。
答案 3 :(得分:1)
你可以这样做
select index_name
from user_indexes
答案 4 :(得分:1)
您构建代码的方式,可以最小化到以下等效代码。请注意,如果this.user.customSetting.themePicker
为真时保证this.user.customSetting
始终为真,则可以在条件为field.disabled = true
的单个if语句中设置field.name == 'themeColor'
:
if (field.name == 'themeColor' && this.user.customSetting) {
field.disabled = !this.user.customSetting.themePicker;
} else if (field.name == 'themeColor') {
field.disabled = false;
}
甚至可以使用以下switch语句,具体取决于您希望代码的结构。它们都是一样的。
switch (field.name) {
case 'themeColor':
if (this.user.customSetting) {
field.disabled = !this.user.customSetting.themePicker;
}
break;
default:
field.disabled = false;
}
这些答案中的大多数都打破了三元语句可读性的基本规则。如果您的目标是简单的可读性,那么将其分解为简单的if/else if
语句就行了。如果您尝试尽可能地减少代码,并且不关心它是否不可维护/难以阅读,则应将其简化为递归三元语句。就个人而言,我发现长三元语句不能提供显着的节省空间,妨碍可读性,并且应该避免在它们不是非常简单的情况下(即:var x = statement? 1 : 0;
)
答案 5 :(得分:0)
试试这个
if (field.name === 'themeColor') {
field.disabled = this.isV1User ? true : this.user.customSetting ? !this.user.customSetting.themePicker : false;
}