jQuery循环遍历数组(产品/日期)并计算连续计数的价格

时间:2017-01-31 13:39:36

标签: jquery arrays

试图找出某些东西的逻辑并寻找任何类型的指针。

我有6天以上的清单。我已经在每个div上都有一个计数器,计算它连续几天。原因是因为如果您在2017年1月30日,01/31/17和02/01/17预订产品,您将获得基于连续连续天数的折扣。如果天数中断,链条会重新开始,正如您在consec="1"再次开始时所看到的那样。折扣仅回顾4天,并计算每个产品的价格。

例如:

  • 标准价格:50
  • 连续两天价格:45
  • 连续3天价格:40
  • 连续4天价格35

假设用户预订了第1天的产品,第2天的3个,第3天的2个,第4天的5个,第5天的2个。

第1天:他们会以正常价格购买1件产品。 总计:50

第2天:他们将以“连续两天”折扣价获得1件产品,并以正常价格获得2件产品,因为它现在是以前的连锁店的一部分。 总计145

第3天:他们将以“连续三天”的折扣价格(从第1天和第2天)获得1件产品,并且以“连续两天”折扣价购买1件产品,并且没有正常价格的产品没有一个不属于链条的一部分。 总计85

第4天:他们现在将获得1件产品“连续4天”的折扣价(因为所有4天至少有1件),1件产品以“连续3天”的折扣价格(不是3件因为第3天下降了1,1仍然是4天的价格),然后3是正常价格,因为前一天它只有2,两者都已经在较大的折扣中占据,因为这3个是品牌当天是新的,基本上。 总计225

第5天:这一天在第1天停止考虑任何事情,因为连续折扣只能追溯到4天。它有两个产品在“连续4天”的价格,因为至少有2个产品连续4天回来。 总计70

所以这有点令人困惑......

我想要做的是修改输入data-product-id="1"的任何数量时,更改它可能影响的每一行的计算价格。

我尝试过几种不同的方式来讨论每个语句,第一种方法是我尝试检查consecDayCount,如果它是4或更大,那么做一些逻辑,如果它是3则执行其他逻辑,并且如果是2做其他逻辑。这最终成了一场噩梦,从未正常运作。如果有一天没有这个产品,就会遇到问题。

我认为它需要与数组或多维数组有关吗?通过它们循环并以某种方式跟踪每个价格的数量,将价格加在一起以获得价格输入的每个总价格。

我需要的只是输入正确总价的价格输入,我不需要在任何地方列出每个价格。

关于如何最好地循环并计算每一个的任何建议都会很棒。真的想了解最好的方法。

$('.date-row').on('change keyup', '.qty', function() {
  var productId = $(this).data('product-id');
  var consecDayCount = $(this).closest('.date-row').data('consec');
  if (productId == 1) {
    var standardPrice = 50;
    var consPriceTwo = 45;
    var consPriceThree = 40;
    var consPriceFour = 35;
    $('.qty[data-product-id="1"]').each(function() {
                 // where I'm running into trouble
                 // insert some missing logic to calculate each Qty level
      //var standardQty = $(this).val(); // is this what you meant? (- not left by question asker)
      // Not really, the standardQty would be the only qty in only 
      // the case where none of the products will be given a 
      // consecutive day discount.
      // standardQty is the qty of products at the standard price, 
      // which must be calculated based off how many of the previous           
      // consecutive days products carry over, like in the example. (- response from question asker)
     
      var dateRow = $(this).closest('.date-row');
      var priceInput = dateRow.find('.price');

      var standardTotal = standardQty * standardPrice;
      var consPriceTwoTotal = consTwoQty * consPriceTwo;
      var consPriceThreeTotal = consThreeQty * consPriceThree;
      var consPriceFourTotal = consFourQty * consPriceFour;

      var newPrice = standardTotal + consPriceTwoTotal + consPriceThreeTotal + consPriceFourTotal;

    });
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="date-row" date-consec="1">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>
<div class="date-row" date-consec="2">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>
<div class="date-row" date-consec="3">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>
<div class="date-row" date-consec="4">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>
<div class="date-row" date-consec="5">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>
<div class="date-row" date-consec="6">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>

<div class="date-row" date-consec="1">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>
<div class="date-row" date-consec="2">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>
<div class="date-row" date-consec="3">
  <input name="qty" class="qty" type="number" data-product-id="1">
  <input name="price" class="price" type="text">
</div>

在HTML中注意,底部3个div的连续日期已经开始,因为它们不是连接到其他日子的日子,让我们在这个例子中说它们是在月末而第一个设置在月初。所以他们的连续折扣将重新开始。

0 个答案:

没有答案