代码之家  ›  专栏  ›  技术社区  ›  Mouad Ennaciri

JavaScript/Angular1-重构算法/逻辑条件

  •  0
  • Mouad Ennaciri  · 技术社区  · 7 年前

    我有两个条件来比较两个模型是否存在,以显示不同的消息。 this.realEstateProjectCurrentProduct 保持不变,这是属性 housingTax propertyTax 不同的是,else的情况保持不变。

    if (this.realEstateProjectCurrentProduct.housingTax) {
      return this.housingTax = `${this.realEstateProjectCurrentProduct.housingTax} ${this.$translate.instant('currencySymbols.euro')}`
    } else {
      return this.housingTax = 'No data'
    }
    if (this.realEstateProjectCurrentProduct.propertyTax) {
      return this.propertyTax = `${this.realEstateProjectCurrentProduct.propertyTax} ${this.$translate.instant('currencySymbols.euro')}`
    } else {
      return this.propertyTax = 'No data'
    }
    

    例如,由于这两种情况与Lodash或ecmaScript 2015有太多相似之处,我如何改进这两种情况

    2 回复  |  直到 7 年前
        1
  •  1
  •   dark_ruby    7 年前

    您可以使用属性分解,例如:

    let { housingTax, propertyTax } = this.realEstateProjectCurrentProduct;
    housingTax = housingTax ? `${housingTax} ${this.$translate.instant('currencySymbols.euro')}`: 'no data'
    propertyTax = propertyTax ?  `${propertyTax} ${this.$translate.instant('currencySymbols.euro')}` : 'no data'
    
        2
  •  1
  •   UncleDave    7 年前

    虽然不是最安全的方法(魔术字符串通常很糟糕),但您可以尝试提取实际功能,并输入您想要更改的属性的名称。

    function processTax(taxType) {
      if (this.realEstateProjectCurrentProduct[taxType]) {
        this[taxType]= `${this.realEstateProjectCurrentProduct[taxType]} ${this.$translate.instant('currencySymbols.euro')}`
      } else {
        this[taxType]= 'No data'
      }
    }
    
    processTax('housingTax');
    processTax('propertyTax');
    

    如果您希望将来有更多,请考虑使用阵列:

    ['housingTax', 'propertyTax'].forEach(tax => processTax(tax));