Есть 2 поля select, в каждом из них по 18 значений, от 1 до 18.
Сейчас у меня есть калькулятор, который очень прост - он высчитывает разницу между прошлым и текущим значением и умножает это на 100:
var current_rank, new_rank;
$('#rank1').change(function(){
current_rank = parseInt($(this).val());
var result = (new_rank - current_rank) * 100;
console.log(result);
});
$('#rank2').change(function(){
var new_rank = parseInt($(this).val());
var result = (new_rank - current_rank) * 100;
console.log(result);
});
Но тут возник вопрос: Как сделать коэффициенты для этих значений? Т.е. Чтобы от 1 до 6 цена была 100, от 7 до 12 - 300 и от 13 до 18 - 500?
Для примеров, чтобы было нагляднее: Человек выбирает из первого поля значение 3, из 2 поля значение 6. Все значения входят в диапазон от 1 до 6, следовательно, (6-3)*100=300.
Значение 1 поля - 5, значение 2 поля - 9 Сейчас происходит так: (9-5)*100=400, но мне нужно, чтобы это рассчитывалось иным путем, поскольку сюда входит значение 6, цена которого 100, а также значения 7,8 и 9, цена которых 300. Следовательно, результат будет такой: 100+(300*3)=1000
Как это сделать, кто знает? А то даже мыслей нет, хотя все просто вроде бы...
Простейшим решением будет посчитать всё это в цикле:
function diffRank(prev, curr) {
let res = 0;
for (let i = curr; i > prev; i--) {
switch (true) {
case i >= 13: res += 500; break;
case i >= 7: res += 300; break;
default: res += 100;
}
}
return res;
}
Однако, можно попробовать решить это аналитически:
res += (curr - prev) * 100;
if (curr>6 ) res+= (curr-6) * 200;
if (curr>12 ) res+= (curr-12) * 200;
Если воспользоваться тем, как bool выражения приводятся к numeric, можно записать вот такой write-only однострочник:
const diffRate = (p, c) => 100*((c-p)+2*((c>6)*(c-6)+(c>12)*(c-12)));
console.log(diffRate(5, 9));
console.log(diffRate(5, 14))
Добавляю следующий код(пытаюсь добавить элемент в svg) но не получется,поясните как поправить