定价折扣逻辑,4块2块,5块6块

Pricing discount logic, 2 for $4, 6 for the price of 5

所以我目前正在研究一些定价逻辑,其中的情况是:


所以index/stage需要

应用折扣非常重要

我的逻辑灵感来自这篇文章: http://codekata.com/kata/kata01-supermarket-pricing/

我的代码灵感来自这篇文章: https://github.com/raddanesh/Kata01

特别是下图中显示的 VolumePricingStrategy:

根据我想要实现的逻辑,这是我的代码尝试:

//2 for 
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) returns 6 而不是 6.5 中明确表达,如果您更改阈值参数量,所有场景都不匹配。非常感谢任何 ideas/help!

对于口香糖场景,我不太确定 github.com/raddanesh/Kata01 的代码示例是否可以应用于此逻辑。因为它看起来很不一样,我不确定真正采取什么方法。 如您所见,我已经将这个 regularPrice 的 volumePrice 设为 * 0.16666667,这反映了每口香糖的折扣金额。

我想到的另一个想法是可能将价格放入一个数组中,并在满足阈值的情况下弹出最后一个,但是我不确定这有多可行我仍然需要数组中的那个项目进行进一步计算.这个我认为是最棘手的,我在网上找不到很多好的例子,所以这个 post!欢迎大家ideas/suggestions!

这两种情况都需要几乎相同的逻辑 -- 有一个单独的价格,一个团体的价格,任何不适合团体的物品都将获得单独的价格。

所以我的方法是将其用作逻辑的基础。编写一个函数,将数量、组数量、个人价格和团体价格作为输入,如下所示:

function getPrice(qty, groupQty, indivPrice, groupPrice) {
  const groupCount = Math.floor(qty / groupQty);
  const indivCount = qty % groupQty;
  return (groupCount * groupPrice) + (indivCount * indivPrice);
}

console.log(getPrice(5, 2, 1.5, 2.5)); // groups of 2 cost 2.5, but 1 costs 1.5 -- total should be 6.5

所以从现在开始,您需要做的就是根据交易类型计算出 'groupPrice'

有很多方法可以做到这一点。我倾向于走代码更少的路线。

我会走这条路。

if(quantity => threshold){

discounteditems = Math.floor(quantity/threhold);
remainder = quantity%threhold;
discountedtotalprice = discounteditems * discountedprice;
fullprice = remainder * fullprice;

}

通过这种方式您可以获得所有打折商品,超出此阈值的商品您将收取全价。

对我来说,这是一种更简单的方法来获得你正在寻找的欲望。