Angular1 / JavaScript - 改善算法条件

时间:2017-10-12 08:54:01

标签: javascript angularjs ecmascript-6 lodash

我有这个条件验证对象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的简化写入重构/优化条件的情况下有太多的相似之处?

5 个答案:

答案 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.