Калькулятор с коэфицентом

206
22 февраля 2017, 22:36

Есть 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

Как это сделать, кто знает? А то даже мыслей нет, хотя все просто вроде бы...

Answer 1

Простейшим решением будет посчитать всё это в цикле:

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))

READ ALSO
Не удается добавить элементы в свг динамически

Не удается добавить элементы в свг динамически

Добавляю следующий код(пытаюсь добавить элемент в svg) но не получется,поясните как поправить

237
Flexbox: space-between ведет себя как space-around

Flexbox: space-between ведет себя как space-around

В коде ничего лишнего:

295
CSS анимация изменяет положение элемента

CSS анимация изменяет положение элемента

У меня есть шестиугольник внутри окружности

282
Проблемы с наследованием !important свойств в CSS

Проблемы с наследованием !important свойств в CSS

Праздно ковыряя CSS заметил странный момент

196