Помогите собрать функцию скидки
Добрый день! такая задача
Напишите функцию, которая вычисляет и возвращает стоимость корзины товаров после применения всех скидок. В качестве аргументов функция принимает 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, время: 04:05. |