【发布时间】:2021-02-24 15:39:34
【问题描述】:
所以我目前正在研究某些情况下的定价逻辑:
- 1 只手套售价 2.50 美元,2 只手套售价 4 美元,因此可享受 20% 的折扣。
- 如果一个人买了 3 只手套,那么应该是 4 美元 + 原价 2.50 美元,总计 6.50 美元
- 如果一个人买了 4 只手套,那么应该是 8 美元。
- 1 块口香糖 0.65 美元,你可以花 5 块买 6 块,所以 6 块 3.25 美元而不是 3.90 美元
- 如果一个人买了 7 个,那么应该是 6 个,3.25 美元 + 原价 0.65 美元,总计 3.90 美元
- 如果一个人买8个,那么应该是6个3.25美元+(原价0.65美元*2)总计4.55美元
所以在什么指数/阶段需要应用折扣是非常重要的
我从这篇文章中获得了我的逻辑灵感: http://codekata.com/kata/kata01-supermarket-pricing/
我的代码灵感来自这篇文章: https://github.com/raddanesh/Kata01
特别是 VolumePricingStrategy 如下图所示:
根据我想要实现的逻辑,这是我的代码尝试:
//2 for $4
const gloves = {quantity: 3, price: 2.50 }
function volumePriceGloves(threshold = 2){
let regularPrice = gloves.quantity * gloves.price;
let volumeDiscount = 0;
let volumePrice = regularPrice * 0.8;
if(gloves.quantity >= threshold){
volumeDiscount = threshold * gloves.price - volumePrice
}
return regularPrice - volumeDiscount;
}
// 5 for the price of 6
const gum = {quantity: 7, price: 0.65 }
function volumePriceGum(threshold = 6){
let regularPrice = gum.quantity * gum.price;
let volumeDiscount = 0;
let volumePrice = regularPrice * 0.16666667;
if(gum.quantity % threshold){
volumeDiscount = threshold * gum.price - volumePrice;
}
return regularPrice - volumeDiscount;
}
我的代码显然是错误的,因为它在调用函数时输出了不正确的值。虽然我非常喜欢 github.com/raddanesh/Kata01 写的代码并且能理解它背后的概念。我真的很难真正理解 volumePrice 代表什么。在我看来,volumePrice 是该产品达到阈值时的折扣价。
因此,对于手套场景,volumePrice 为 regularPrice * 0.8 是有意义的,它代表原始价格的 20% 折扣。但是,我的意图并没有完全体现在我的代码中 volumePriceGloves(3) 返回 6 而不是 6.5 并且如果您更改阈值参数量,所有场景都不匹配。非常感谢任何想法/帮助!
对于口香糖场景,我不太确定 github.com/raddanesh/Kata01 的代码示例是否可以应用于此逻辑。因为它看起来完全不同,我不确定真正采取什么方法。 如您所见,我在这个常规价格 * 0.16666667 上设置了 volumePrice,这反映了每口口香糖的折扣金额。
我想到的另一个想法是可能将价格放入数组中,并在满足阈值的情况下弹出最后一个价格,但是我不确定这有多可行,我仍然需要数组中的该项目进行进一步计算。这个我认为是最棘手的,我在网上找不到很多好的例子,因此这篇文章!欢迎所有想法/建议!
【问题讨论】:
-
I'm really struggling to truly understand what volumePrice is representing-- 批量价格只是当有人订购一定数量的产品时给予的折扣。例如,如果您订购 1 支铅笔,每支铅笔的成本为 1 美元。如果您订购两支铅笔,每支铅笔的成本为 0.90 美元,总成本为 9 美元而不是 10 美元。如果您订购 100 支铅笔,每支铅笔的成本为 0.80 美元,总成本为 80 美元,而不是 90 美元或 100 美元。 -
简而言之,我认为您可能想多了。如果这是一个家庭作业问题,请询问样本输入和输出。这应该可以澄清您的一些担忧。
-
@RobertHarvey 嗯好的。这有点道理,但我不能以我想要的方式自定义 volumePrice (这就是我认为我在上面所做的)。你刚才提到的例子是任意的吧?你可能是对的,我想太多了
-
是的,我的例子是任意的。批量折扣括号可以以任何您想要的方式存储:直接在代码中、在字典中、在数据库中、在 JSON 文件中等等。
标签: javascript arrays function object modulus