我有这个条件验证对象labelKey
的相同属性projectType
并根据属性的值返回不同的值
checkProjectType () {
if (this.projectType.labelKey === 'project_type.rent') {
return 'geographical_area'
} else if (this.projectType.labelKey === 'project_type.buying') {
return 'geographical_area'
} else {
return 'address'
}
}
因为在使用Lodash或ECMAScript 2015的简化写入重构/优化条件的情况下有太多的相似之处?
答案 0 :(得分:2)
根据您的代码,您可以将其减少到更少的条件。
checkProjectType () {
var labelKey = this.projectType.labelKey;
if (labelKey === 'project_type.rent' || labelKey === 'project_type.buying') {
return 'geographical_area';
}
return 'address';
}
不确定你想用lodash做什么
答案 1 :(得分:1)
设置if do X else如果做X其他做Y对我来说是错误的,你可以在一行中简化:if(this.projectType.labelKey ===' project_type.rent' | | this.projectType.labelKey ===' project_type.buying')已经更容易阅读了。
答案 2 :(得分:1)
可以编写的另一种方法是使用switch
语句:
switch (this.projectType.labelKey) {
case 'project_type.rent':
case 'project_type.buying':
return 'geographical_area';
default:
return 'address';
}
但有人可能认为这种情况有点矫枉过正。 Lodash或ECMAScript 2015在这里不会为你做任何事情。
答案 3 :(得分:1)
您可以检查项目类型是否包含在类型数组中,并使用三元组来选择响应:
checkProjectType() {
return ['project_type.rent', 'project_type.buying'].includes(this.projectType) ? 'geographical_area' : 'address';
}
如果生成geographical_area
的类型,您可以从方法(和对象/类)中重构它们:
const geoTypes = ['project_type.rent', 'project_type.buying'];
checkProjectType() {
return geoTypes.includes(this.projectType) ? 'geographical_area' : 'address';
}
答案 4 :(得分:1)
I also don't like if-else-if…
chains, so prefer more readable variant.
function checkProjectType() {
const defaultType = 'address';
const key = this.projectType.labelKey;
let map = {
'project_type.rent': 'geographical_area',
'project_type.buying': 'geographical_area'
};
return map[key] || defaultType;
}
map
can be defined somewhere else.