У меня есть четыре переменные, которые имеют разные диапазоны.Мне нужно рассчитать процентное положение каждой переменной в пределах указанного диапазона, а затем рассчитать средневзвешенное значение процентилей.Некоторые веса измеряются по возрастанию, а некоторые по убыванию.Восходящий означает, что процент диапазона выше, когда переменная увеличивается выше минимального значения, а убывающий означает, что процентное значение диапазона увеличивается, когда переменная уменьшается ниже максимального значения.
Я использую ES5.
У меня есть некоторый код перебора, но это, вероятно, не самое эффективное решение?
Дополнительная информация: Цель состоит в том, чтобы вычислить одно число, которое анализирует значение четырех переменных.Для каждой переменной существует диапазон значений, относящихся к измеряемой ситуации.Кроме того, каждая переменная имеет разный вес по отношению к конечному результату.
function fCalcWtdAvg() {
//Four variables are the inputs: vVar1, vVar2, vVar3, vVar4
//For each variable, there is a relevant range and a weight
//For example, for vVar1, a value above 50 is relevant and a value at or above 100 is most significant, so 60 would be 20%, then weighted by vVar1Wt
var vVar1Min = 50, vVar1Max = 100, vVar1Wt = 0.1;
var vVar2Min = 0.3, vVar2Max = 0.5, vVar2Wt = 0.3; //Note: descending
var vVar3Min = 150, vVar3Max = 500, vVar3Wt = 0.5;
var vVar4Min = 0.8, vVar4Max = 2, vVar4Wt = 0.2;
//next calculate the percentage that the value of the variable is "in the range"
var vStress1 = fPercentRange(vVar1, vVar1Min, vVar1Max);
var vStress2 = fPercentRangeDec(vVar2, vVar2Min, vVar2Max);
var vStress3 = fPercentRange(vVar3, vVar3Min, vVar3Max);
var vStress4 = fPercentRange(vVar4, vVar4Min, vVar4Max);
return vWtdAve = (vStress1 * vVar1Wt) + (vStress1 * vVar1Wt) + (vStress1 * vVar1Wt) + (vStress1 * vVar1Wt);
}
function fPercentRange (vVal, vMin, vMax) {
// if a higher value is more significant
if (vVal > vMin) {
var vPercent = ((vVal - vMin) / (vMax - vMin)) * 100;
return number = Math.min(parseInt(vPercent), 100);
} else {
return 0;
}
}
function fPercentRangeDec (vVal, vMin, vMax) {
//if a lower value is more significant
if (vVal < vMax) {
var vPercent = ((vMax - vVal) / (vMax - vMin)) * 100;
return number = Math.min(parseInt(vPercent), 100);
} else {
return 0;
}
}
Буду признателен за некоторые предложения по более эффективному достижению этого.