Расчёт стоимости

194
06 октября 2018, 18:30

Есть скрипт (ниже), который должен по задумке на состояние checkbox - checked записывать value этого checkbox(их много) в массив, делать тоже самое с другим checkbox (и т.д) и выдавать на странице сумму этих значений. С этим он благо справляется. Так же с получившейся суммой необходимо провести несколько операций - отнять 20% если длинна массива 2, 30% если 3, 40 если 4 и более.
Я попытался это реализовать с помощью ещё одной функции, которая так же обращается к этому массиву. Проблема в том, что он отнимает не 20%, а больше (я пересчитывал в ручную, да и взглянув понять не сложно). Буду очень рад вашей помощи и совету.

/*Получаем значение по признаку checked */
var boxes = $("input:checkbox");
$("input:checkbox").on("change", function(){
  var theArray = new Array();
  for (var i=0;i<boxes.length;i++) {
   var box = boxes[i];
   if ($(box).prop('checked')) {
      theArray[theArray.length] = $(box).val();
   }
}
  showValues(theArray);
  showDiscount(theArray);
});
/* Сумма значений из массива*/
var showValues = function(array) {
  var text = "";
  if(!array.length) {
    text += "Ни одна система не выбрана";
  }
  for(var i = 0; i < array.length; i++) {
    if (!text) {
     text = +array[i];
    }
    else text += +array[i];
   }
  $(".cost").html(text);
}
/* Сумма - %*/
var showDiscount = function(array) {
  var disc = "";
  var sumDisc = +array[i];
  if (!array.length) {
    disc += "Ни одна система не выбрана";
  }
  for (var i=1; i < array.length; i++) {
    if (!disc) {
     disc = +array[i];
    }
    else {
    disc += sumDisc * 0.8;
    }
  }
  $(".discount").html(disc);
}
Answer 1

function calcSumWithDiscount(arr) { 
  var sum = 0; 
  for (var i = 0; i < arr.length; i++) { 
    sum = sum + (+arr[i]); 
  } 
 
  var disc = 0; 
  if (arr.length == 2) 
    disc = 0.2; 
  else if (arr.length == 3) 
    disc = 0.3; 
  else if (arr.length >= 4) 
    disc = 0.4; 
 
  sum = sum * (1 - disc); 
  return sum; 
} 
 
console.log(calcSumWithDiscount([10])); 
console.log(calcSumWithDiscount([10,10])); 
console.log(calcSumWithDiscount([10,10,10])); 
console.log(calcSumWithDiscount([10,10,10,10,10]));

READ ALSO
Particleground и Angular js

Particleground и Angular js

Когда начинаю использовать роутинг из Angular 16

198
Показать сначала гиф, а затем число

Показать сначала гиф, а затем число

Нужно сделать так, чтобы при переходе на страницу сначала в течение 10 - 15 секунд вопроизводилась гиф анимация, а затем на её месте появилось...

183
Транслит в MySQL

Транслит в MySQL

При переносе сайта с одного хостинга на другой перестала работать функция транслита, на старом работает, на новом нетПомогите пожалуйста...

203
Аномальное поведение nodej и MySQL, потеря связи

Аномальное поведение nodej и MySQL, потеря связи

Встретился с аномальным поведением NodeJS и MySQLВопрос очень специфический, буду рад любым догадкам

209