2017-10-11 47 views
0

我有2个条件比较2个模型,如果它们存在或不显示不同的消息。 对象this.realEstateProjectCurrentProduct保持不变,它的属性housingTaxpropertyTax不同,其他情况保持不变。JavaScript/Angular1 - 重构算法/逻辑条件

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' 
} 

如何提高这2个条件,因为他们之间有太多的相似之处与Lodash或ECMAScript的2015年例如

+0

上面的代码将永远不会得到第二if语句,因为你在赋值之前的所有返回语句 –

回答

1

你可以使用属性解构,如:

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' 
1

虽然不是最安全的方法(魔术字符串是普遍不好),你可以尝试提取实际的功能和传递你想改变的属性的名称。

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));