Javascript 避免在角度分量中使用许多if语句来调用特定函数的最佳方法是什么?

Javascript 避免在角度分量中使用许多if语句来调用特定函数的最佳方法是什么?,javascript,angular,typescript,Javascript,Angular,Typescript,我正在Angular 7中创建一个温度转换应用程序,在我的formGroup中,我有一个输入/输出值和两个多重选择,用户可以在其中选择温度单位“从”和“到”,转换为摄氏度、华氏度或开尔文 当用户在我的组件中提交表单时,我得到了输入数据 submitForm(data) { this.input = data.input; this.unitInput= data.unitInput; this.unitTarget= data.unitTarget; this.o

我正在Angular 7中创建一个温度转换应用程序,在我的formGroup中,我有一个输入/输出值和两个多重选择,用户可以在其中选择温度单位“从”和“到”,转换为摄氏度、华氏度或开尔文

当用户在我的组件中提交表单时,我得到了输入数据

submitForm(data) {
    this.input = data.input;
    this.unitInput= data.unitInput;
    this.unitTarget= data.unitTarget;
    this.output= data.output;
  }
我只想添加if语句来调用将进行转换的函数,但现在看看我使用的所有if语句,似乎很多,不是一个好的设计

if (this.inputUnit === 'Celsius' && this.targetUnit === 'Fahrenheit') {
        this.celsiusToFahrenheitConversion ();
}
if (this.inputUnit === 'Celsius' && this.targetUnit === 'Kelvin') {
      this.celsiusToKelvinConversion ();
}
if (this.inputUnit === 'Celsius' && this.targetUnit === 'Rankine') {
      this.celsiusToRankineConversion ();
}
如果是华氏温度,如果是开尔文,如果是兰金,等等。。 如果我想在功能中添加一种不同的单元呢? 什么是更好的方法


提前感谢

我认为最干净的处理方法是使用switch语句。没有比这更简单的了,我个人也讨厌它,但有时候真的没有办法

switch(this.inputType) {
  case 'Celsius':
    switch(this.targetUnit) {
      case 'Fahrenheit':
        this.celsiusToFahrenheitConversion();
        break;
      case 'Kelvin':
        this.celsiusToKelvinConversion();
        break;
      case 'Rankine':
        this.celsiusToRankineConversion();
        break;
    }
    break;
  case 'Fahrenheit':
    break;
  case 'Rankine':
    break;
  case 'Kelvin':
    break;
}
然而!这是一个数学转换。华氏度至摄氏度32华氏度− 32×5/9,F°到开尔文为32°F− 32×5/9+273.15,到朗肯的华氏度为32°F+459.67,依此类推。数学在哪里,有一个系统。我的方法是创建一个转换表-一个对象,并使用表单值作为查找值。例如:

const magicalLookupTable = {
  celsius: {
    fahrenheit: () => {
      /** Implementation */
    },
    kelvin: () => {
      /** Implementation */
    }
  },
  fahrenheit: {
    celsius: () => {
      /** Implementation */
    },
    kelvin: () => {
      /** Implementation */
    }
  }
}

我认为最干净的处理方法是使用switch语句。没有比这更简单的了,我个人也讨厌它,但有时候真的没有办法

switch(this.inputType) {
  case 'Celsius':
    switch(this.targetUnit) {
      case 'Fahrenheit':
        this.celsiusToFahrenheitConversion();
        break;
      case 'Kelvin':
        this.celsiusToKelvinConversion();
        break;
      case 'Rankine':
        this.celsiusToRankineConversion();
        break;
    }
    break;
  case 'Fahrenheit':
    break;
  case 'Rankine':
    break;
  case 'Kelvin':
    break;
}
然而!这是一个数学转换。华氏度至摄氏度32华氏度− 32×5/9,F°到开尔文为32°F− 32×5/9+273.15,到朗肯的华氏度为32°F+459.67,依此类推。数学在哪里,有一个系统。我的方法是创建一个转换表-一个对象,并使用表单值作为查找值。例如:

const magicalLookupTable = {
  celsius: {
    fahrenheit: () => {
      /** Implementation */
    },
    kelvin: () => {
      /** Implementation */
    }
  },
  fahrenheit: {
    celsius: () => {
      /** Implementation */
    },
    kelvin: () => {
      /** Implementation */
    }
  }
}

当我看到这一点时,我看到针对函数值设置的复合键

表示这一想法的一种方法是使用一个典型的对象,其中键是复合键,它们映射到一个特定的函数:

const conversionFunctions = {
    'celsius-fahrenheit': this.celsiusToFahrenheitConversion,
    'celsius-kelvin': this.celsiusToKelvinConversion,
    'celsius-rankine': this.celsiusToRankineConversion
};

const key = `${this.inputUnit.toLowerCase()}-${this.targetUnit.toLowerCase()}`;
const convert = conversionFunctions[key];

convert();

当我看到这一点时,我看到针对函数值设置的复合键

表示这一想法的一种方法是使用一个典型的对象,其中键是复合键,它们映射到一个特定的函数:

const conversionFunctions = {
    'celsius-fahrenheit': this.celsiusToFahrenheitConversion,
    'celsius-kelvin': this.celsiusToKelvinConversion,
    'celsius-rankine': this.celsiusToRankineConversion
};

const key = `${this.inputUnit.toLowerCase()}-${this.targetUnit.toLowerCase()}`;
const convert = conversionFunctions[key];

convert();