Javascript 重构共享相同变量的两个JS函数
重构以下两个包含非常相似的变量声明的函数的最佳方法是什么:Javascript 重构共享相同变量的两个JS函数,javascript,jquery,refactoring,dry,Javascript,Jquery,Refactoring,Dry,重构以下两个包含非常相似的变量声明的函数的最佳方法是什么: function minFeeCheck(input) { input.value = parseFloat(input.value).toFixed(2); var minFeeUpdate = parseFloat($("#minimumFee").val()).toFixed(2); var maxFeeUpdate = parseFloat($("#maximumFee&qu
function minFeeCheck(input) {
input.value = parseFloat(input.value).toFixed(2);
var minFeeUpdate = parseFloat($("#minimumFee").val()).toFixed(2);
var maxFeeUpdate = parseFloat($("#maximumFee").val()).toFixed(2);
var minInt = parseInt(minFeeUpdate);
var maxInt = parseInt(maxFeeUpdate);
if (minFeeUpdate < 0) input.value = 0;
if (minInt > maxInt) input.value = maxFeeUpdate;
if (minInt > maxInt) {
input.value = minFeeUpdate;
$("#maximumFee").val(minFeeUpdate);
}
}
function maxFeeCheck(input) {
input.value = parseFloat(input.value).toFixed(2);
var minFeeUpdate = parseFloat($("#minimumFee").val()).toFixed(2);
var maxFeeUpdate = parseFloat($("#maximumFee").val()).toFixed(2);
var minInt = parseInt(minFeeUpdate);
var maxInt = parseInt(maxFeeUpdate);
if (maxFeeUpdate < 0) input.value = 0;
if (maxInt < minInt) {
input.value = maxFeeUpdate;
$("#minimumFee").val(maxFeeUpdate);
}
}
功能检查(输入){
input.value=parseFloat(input.value).toFixed(2);
var minFeeUpdate=parseFloat($(“#minimumFee”).val()).toFixed(2);
var maxFeeUpdate=parseFloat($(“#maximumFee”).val()).toFixed(2);
var minInt=parseInt(minFeeUpdate);
var maxInt=parseInt(maxFeeUpdate);
如果(minFeeUpdate<0)input.value=0;
如果(minInt>maxInt)input.value=maxFeeUpdate;
如果(最小值>最大值){
input.value=minFeeUpdate;
$(“#最高费用”).val(minFeeUpdate);
}
}
函数maxFeeCheck(输入){
input.value=parseFloat(input.value).toFixed(2);
var minFeeUpdate=parseFloat($(“#minimumFee”).val()).toFixed(2);
var maxFeeUpdate=parseFloat($(“#maximumFee”).val()).toFixed(2);
var minInt=parseInt(minFeeUpdate);
var maxInt=parseInt(maxFeeUpdate);
如果(maxFeeUpdate<0)input.value=0;
如果(最大值<最小值){
input.value=maxFeeUpdate;
$(“#最低费用”).val(maxFeeUpdate);
}
}
除了一个最小目标和一个最大目标外,这两个功能似乎相似。在保持相同功能的同时,最理想、最干净的写出来的方法是什么。谢谢
更新
在@gaetanoM的帮助下,这里有一个可能的解决方案。它包括检查用户是否输入负数(这会将minFee和maxFee更改为零)
HTML:
JavaScript:
function minMaxFeeCheck(input, minormax) {
input.value = parseFloat(input.value).toFixed(2);
var minFeeUpdate = parseFloat($("#minimumFee").val()).toFixed(2);
var maxFeeUpdate = parseFloat($("#maximumFee").val()).toFixed(2);
var minInt = parseInt(minFeeUpdate);
var maxInt = parseInt(maxFeeUpdate);
var tmp = (minormax) ? minFeeUpdate : maxFeeUpdate;
if (input.value < 0) {
input.value = 0;
$("#minimumFee").val(0);
} else {
if (tmp < 0) input.value = 0;
if (minInt > maxInt) input.value = tmp;
if (minInt > maxInt) {
input.value = tmp;
$("#minimumFee").val(tmp);
}
}
}
函数minMaxFeeCheck(输入,minormax){
input.value=parseFloat(input.value).toFixed(2);
var minFeeUpdate=parseFloat($(“#minimumFee”).val()).toFixed(2);
var maxFeeUpdate=parseFloat($(“#maximumFee”).val()).toFixed(2);
var minInt=parseInt(minFeeUpdate);
var maxInt=parseInt(maxFeeUpdate);
var tmp=(minormax)?minFeeUpdate:maxFeeUpdate;
如果(输入值<0){
input.value=0;
美元(“#最低费用”).val(0);
}否则{
如果(tmp<0)input.value=0;
如果(minInt>maxInt)input.value=tmp;
如果(最小值>最大值){
input.value=tmp;
美元(“#最低费用”).val(tmp);
}
}
}
我的建议是:
函数minmaxFeeCheck(输入,minormax){
input.value=parseFloat(input.value).toFixed(2);
var minFeeUpdate=parseFloat($(“#minimumFee”).val()).toFixed(2);
var maxFeeUpdate=parseFloat($(“#maximumFee”).val()).toFixed(2);
var minInt=parseInt(minFeeUpdate);
var maxInt=parseInt(maxFeeUpdate);
var tmp=(minormax)?minFeeUpdate:maxFeeUpdate;
如果(tmp<0)input.value=0;
如果(minInt>maxInt)input.value=tmp;
如果(最小值>最大值){
input.value=tmp;
美元(“#最低费用”).val(tmp);
}
}
事实上:
if (minInt > maxInt) {
与以下各项相同:
if (maxInt < minInt) {
if(maxInt
您可以尝试以下方法:
function minMaxFeeCheck(input) {
input.value = +parseFloat(input.value).toFixed(2);
const minFeeUpdate = +parseFloat($("#minimumFee").val()).toFixed(2);
const maxFeeUpdate = +parseFloat($("#maximumFee").val()).toFixed(2);
minFeeUpdate < 0 ? input.value = 0 : minFeeUpdate > maxFeeUpdate ? input.value = minFeeUpdate && $('#maximumFee').val(minFeeUpdate) : input.value = maxFeeUpdate && $('#minimumFee').val(maxFeeUpdate);
}
函数minMaxFeeCheck(输入){
input.value=+parseFloat(input.value).toFixed(2);
const minFeeUpdate=+parseFloat($(“#minimumFee”).val()).toFixed(2);
const maxFeeUpdate=+parseFloat($(“#maximumFee”).val()).toFixed(2);
minFeeUpdate<0?input.value=0:minFeeUpdate>maxFeeUpdate?input.value=minFeeUpdate&&$('#maximumFee').val(minFeeUpdate):input.value=maxFeeUpdate&$('#maximumFee').val(maxFeeUpdate);
}
我非常喜欢这个解决方案。唯一的例外是它允许在最小输入中使用负数。我认为不应该允许使用负数。谢谢你的想法。@PeteAdamBialecki你可以应用Math.abs(…你的数字…)来获得绝对值…我认为Math.abs()这条路线很好,但强迫任何负数变为零可能是最好的路线。我会用你的建议更新我的问题。让我知道你的想法。@PeteAdamBialecki我读了你的更新。这是解决负值的极好方法。
function minMaxFeeCheck(input) {
input.value = +parseFloat(input.value).toFixed(2);
const minFeeUpdate = +parseFloat($("#minimumFee").val()).toFixed(2);
const maxFeeUpdate = +parseFloat($("#maximumFee").val()).toFixed(2);
minFeeUpdate < 0 ? input.value = 0 : minFeeUpdate > maxFeeUpdate ? input.value = minFeeUpdate && $('#maximumFee').val(minFeeUpdate) : input.value = maxFeeUpdate && $('#minimumFee').val(maxFeeUpdate);
}