JavaScript / Angular1 - Refacto算法/逻辑条件

时间:2017-10-11 09:27:58

标签: javascript angularjs ecmascript-6 lodash

我有2个条件可比较2个模型(如果存在或不存在)以显示不同的消息。 对象this.realEstateProjectCurrentProduct保持不变,属性housingTaxpropertyTax不同,其他情况保持不变。

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 个答案:

答案 0 :(得分:1)

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

<div class="container">
  <p>some info goes here</p>
  <span class="parent"><span class="child"></span></span>
</div>

如果您希望将来有更多,请考虑一个数组:

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

答案 1 :(得分: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'