#javascript #math #formula
Вопрос:
Пытаюсь выяснить, как купить x и получить y бесплатно. Например, купите 10, получите 1 бесплатно, купите 20, получите 2 бесплатно и так далее. Пока я просто использую такую формулу, как эта. Эта формула не будет работать при изменении на пример: Купите 5, получите 1 бесплатно, купите 10, получите 2 бесплатно..
Тс
getFreeItem(){ let countTotal; this.commonService.getOrderList$.subscribe((x) =gt; { x.filter(item =gt; { item.forEach((element, i) =gt; { if (element.freeDealMin !== null) { item?.reduce((a, b) =gt; { let aVal = a?.count ? a?.count : a; let bVal = b?.count ? b?.count : b; countTotal = aVal bVal; return aVal bVal; }, 0); let statusFree = element.freeDealMin/ countTotal; if (statusFree == 1) { this.freeDealQty = 1; }else if (statusFree == 0.5) { this.freeDealQty = 2; }else if (statusFree == 0.33333333333) { this.freeDealQty = 3; } } }); }); }); }
Комментарии:
1. Всегда ли увеличение происходит в одинаковой пропорции?
2. @EvanTrimboli да.. увеличение всегда в одинаковой пропорции
3.
const amountFree = Math.floor(totalItems / freeThreshold)
4. @EvanTrimboli Благодарит, что это сработало.. Можете ли вы добавить в ответ, чтобы я мог это принять
Ответ №1:
Простая формула:
function getFreeItem(purchaseCount,buyCount=10,freeCount=1) { // default paramters (10 items for 1 free) let rate = Math.floor(purchaseCount / buyCount); return rate * freeCount; } console.log('Buy 10, Get 1'); console.log('5', getFreeItem(5)); console.log('10',getFreeItem(10)); console.log('15',getFreeItem(15)); console.log('20',getFreeItem(20)); console.log(); console.log('Buy 5, Get 1'); console.log('5', getFreeItem(5,5)); console.log('10',getFreeItem(10,5)); console.log('15',getFreeItem(15,5)); console.log('20',getFreeItem(20,5)); console.log(); console.log('Buy 10, Get 2'); console.log('5', getFreeItem(5, 10,2)); console.log('10',getFreeItem(10,10,2)); console.log('15',getFreeItem(15,10,2)); console.log('20',getFreeItem(20,10,2)); console.log(); console.log('BOGO: Buy 1, Get 1'); console.log('5', getFreeItem(5, 1)); console.log('10',getFreeItem(10,1)); console.log('15',getFreeItem(15,1)); console.log('20',getFreeItem(20,1)); console.log();
Измените параметры в соответствии с вашим курсом BOGO