Функцию на js, которая вычисляет и возвращает стоимость корзины товаров после применения всех скидок
Необходимо написать функцию, которая вычисляет и возвращает стоимость корзины товаров после применения всех скидок. В качестве аргументов функция принимает 3 параметра:
Общая сумма корзины Количество товаров в корзине Промокод (по умолчанию null) Правила и порядок (порядок важен!) начисления скидок:
Если промокод равен 'ДАРИМ300', то из суммы вычитается 300 рублей. При этом если сумма меньше 300 рублей, то итоговая стоимость будет 0. При количестве товаров в корзине ≥10 применяется скидка 5% ко всей сумме При сумме, превышающей 50 000, применяется скидка 20% к сумме превышения (то есть к разнице суммы корзины и 50 000) Если промокод равен 'СКИДКА15', то ко всей сумме применяется скидка 15%, но только если сумма ≥20 000 Каждая следующая скидка должна проверяться и применяться к сумме после применения предыдущих скидок.
function cart(basketAmount, countGoods, promo = null) {
if (promo = 'ДАРИМ300' && basketAmount < 300) {
totalAmount = 0;
console.log('Стоимость равна ' + totalAmount);
} else if (promo = 'ДАРИМ300') {
const totalAmount = basketAmount - 300;
console.log('Стоимость равна ' + totalAmount);
} else if (countGoods >= 10) {
const countFiveProcent = basketAmount/100*5;
totalAmount = basketAmount - countFiveProcent;
console.log('Стоимость равна ' + totalAmount);
} else if (basketAmount > 50000) {
const countTwentyProcent = basketAmount/100*20;
const countDifference = basketAmount - 50000;
totalAmount = countDifference - countTwentyProcent;
console.log('Стоимость равна ' + totalAmount);
} else if (promo = 'СКИДКА15' && basketAmount >= 20000) {
const countFifteenProcent = basketAmount/100*15;
totalAmount = basketAmount - countFifteenProcent;
console.log('Стоимость равна ' + totalAmount);
}
}
cart(1000, 2, 'ДАРИМ300');
Ответы (3 шт):
Как работают сами функции скидок я не смотрел, у вас ошибка в логике. Операторы else if работают по очереди, но если условие соблюдено — дальше программа не идет. Вам нужно разбить проверку каждой скидку отдельно, а также каждый раз пересчитывать total, чтобы каждая последующая скидка считалась от предыдущей. примерно такой layout будет:
console.clear();
function cart(basketAmount, countGoods, promo = null) {
let totalAmount = basketAmount;
if (promo = 'ДАРИМ300' && basketAmount < 300) {
totalAmount = 0;
console.log('ДАРИМ300 ' + totalAmount);
} else if (promo = 'ДАРИМ300') {
totalAmount -= 300;
console.log('ДАРИМ300 ' + totalAmount);
}
if (countGoods >= 10) {
const countFiveProcent = basketAmount/100*5;
totalAmount -= countFiveProcent;
console.log('больше 10 товаров ' + totalAmount);
}
if (basketAmount > 50000) {
const countTwentyProcent = totalAmount/100*20;
const countDifference = totalAmount - 50000;
totalAmount = countDifference - countTwentyProcent;
console.log('больше 50 000 ₽ ' + totalAmount);
}
if (promo = 'СКИДКА15' && basketAmount >= 20000) {
const countFifteenProcent = totalAmount/100*15;
totalAmount -= countFifteenProcent;
console.log('СКИДКА15 ' + totalAmount);
}
console.log('Стоимость равна ' + totalAmount);
}
cart(100000, 12, 'ДАРИМ300');
Как то так, вроде все сходится. Оставлю тут на всякий случай)
let price = 0;
calculate(21000, 12, 'СКИДКА15');
function calculate(amount, products, promo = null) {
// console.log(amount, products, promo);
let basketAmount = amount;
// промокод равен 'ДАРИМ300'
if (promo === 'ДАРИМ300' && basketAmount > 300) {
basketAmount -= 300;
// console.log('basket -300', basketAmount);
} else if (promo === 'ДАРИМ300' && basketAmount < 300) {
basketAmount = 0;
// console.log('basket < 300, = 0', basketAmount);
}
// товаров в корзине ≥10
if (products >= 10) {
let discontFive = basketAmount * 5 / 100;
basketAmount -= discontFive;
// console.log('basket -5%', basketAmount);
}
// сумма, превышающая 50 000, -20%
if (basketAmount >= 50000) {
let discountTwentyDifference = (basketAmount - 50000) * 20 / 100;
basketAmount -= discountTwentyDifference;
// console.log('basket -20%', basketAmount);
}
// промокод равен 'СКИДКА15', если сумма ≥20 000
if (basketAmount >= 20000 && promo === 'СКИДКА15') {
let discontFifteen = basketAmount * 15 / 100;
basketAmount -= discontFifteen;
// console.log('basket -15%', basketAmount);
}
// console.log(basketAmount);
return price = basketAmount;
} // end function
console.log('Cтоимость корзины: ', price);
function calculate(value, products, promo) {
let finalAmount = value;
if (promo == 'ДАРИМ300') {
if (finalAmount <= 300) {
finalAmount = 0;
} else {
finalAmount -= 300;
}
}
if (products >= 10) {
finalAmount *= 0.95;
}
if (finalAmount > 50000) {
finalAmount = 50000 + (finalAmount - 50000) * 0.8;
}
if (promo == 'СКИДКА15') {
if (finalAmount >= 20000) {
finalAmount *= 0.85;
}
}
return finalAmount;
}
calculate();
export default calculate;