Помогите собрать функцию скидки
Добрый день! такая задача
Напишите функцию, которая вычисляет и возвращает стоимость корзины товаров после применения всех скидок. В качестве аргументов функция принимает 3 параметра: Общая сумма корзины Количество товаров в корзине Промокод (по умолчанию null) Правила и порядок (порядок важен!) начисления скидок: Если промокод равен 'ДАРИМ300', то из суммы вычитается 300 рублей. При этом если сумма меньше 300 рублей, то итоговая стоимость будет 0. При количестве товаров в корзине ≥10 применяется скидка 5% ко всей сумме При сумме, превышающей 50 000, применяется скидка 20% к сумме превышения (то есть к разнице суммы корзины и 50 000) Если промокод равен 'СКИДКА15', то ко всей сумме применяется скидка 15%, но только если сумма ≥20 000 нужно реализовать этот пункт задачи -------------Каждая следующая скидка должна проверяться и применяться к сумме после применения предыдущих скидок.>------------------------ function cart(basketAmount, countGoods, promo = null) { let discountAmount = 0; let discountPercent = 0; let rules = [ () => { if (promo === "ДАРИМ300") discountAmount += 300; }, () => { if (countGoods >= 10) discountPercent += 5; }, () => { if (basketAmount > 50000) discountAmount += (basketAmount - 50000) * 0.2 }, () => { if (promo === "СКИДКА15" && basketAmount >= 20000) discountPercent += 15; } ]; for (let f of rules) f(); let result; if (discountPercent >= 100) result = 0; else result = basketAmount * (100 - discountPercent) / 100 - discountAmount; if (result < 0) result = 0; console.log(discountAmount, discountPercent); return result; } console.log(cart(80000, 20, "СКИДКА15")); export default cart буду признателен за помощь в решении |
TomWalbridge,
function cart(basketAmount, countGoods, promo = null) { let discountAmount = 0; let rules = [ () => { if (promo === "ДАРИМ300") discountAmount += 300; }, () => { if (countGoods >= 10) discountAmount += basketAmount * .05; }, () => { if (basketAmount > 50000) discountAmount += (basketAmount - 50000) * 0.2; }, () => { if (promo === "СКИДКА15" && basketAmount >= 20000) discountAmount += basketAmount * 0.15; } ]; for (let f of rules) f(); let result = Math.max(0, basketAmount - discountAmount); return result; } console.log(cart(80000, 20, "СКИДКА15")); |
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
по сути дела код работал, но в подсчете стоимости корзины не учитываются предыдущие скидки, так как берётся только начальная стоимость корзины, а надо учитывать стоимость корзины с применением скидок, вот как это исправить?
Код вроде отформатировал.. function cart(basketAmount, countGoods, promo = null) { 02 let discountAmount = 0; 03 let rules = [ 04 () => { 05 if (promo === "ДАРИМ300") discountAmount += 300; 06 }, 07 () => { 08 if (countGoods >= 10) discountAmount += basketAmount * .05; 09 }, 10 () => { 11 if (basketAmount > 50000) discountAmount += (basketAmount - 50000) * 0.2; 12 }, 13 () => { 14 if (promo === "СКИДКА15" && basketAmount >= 20000) discountAmount += basketAmount * 0.15; 15 } 16 ]; 17 for (let f of rules) f(); 18 let result = Math.max(0, basketAmount - discountAmount); 19 return result; 20 } 21 22 console.log(cart(80000, 20, "СКИДКА15")); |
TomWalbridge,
:-? |
Так можно сделать
function cart(basketAmount, countGoods, promo = null) { let discountAmount = 0; let rules = [ (result) => { return (promo === "ДАРИМ300")? result - 300 : result; }, (result) => { return (countGoods >= 10)? result * 0.95 : result; }, (result) => { return (result > 50000)? result - (50000 - result) * 0.2 : result }, (result) => { return (promo === "СКИДКА15" && result >= 20000)? result * 0.85 : result; } ]; let result = basketAmount; for (let f of rules) { result = f(result); if (result <= 0) { result = 0; break; } } return result; } console.log(cart(80000, 20, "СКИДКА15")); // 69020 А сколько должно быть? |
просто как я понял, надо записать в переменную изначальную стоимость корзины, потом применить к сумме скидки и уменьшать это число, но как реализовать не совсем пойму и где
|
voraa, в твоем алгоритме все время уменьшается result... :(
Т.о. и получаются такие казусы Цитата:
|
собственно, это я и хочу понять как сделать, если есть идеи как написать эту функцию, буду признателен!?
|
TomWalbridge,
чем вариант #2 не устраивает? |
Часовой пояс GMT +3, время: 12:29. |