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