jQuery - 如何从产品名称,数量范围和价格范围表中计算产品价格

时间:2016-05-05 00:26:18

标签: jquery query-optimization

我有3种产品A, B, C

然后我为这些产品添加了2个插件:1, 2

然后我有价格范围与数量范围的表格。见下文

产品与数量价格

+---------------+--------+----------+
|    Product    |  Qty   |  Price   |
+---------------+--------+----------+
|       A       | 0-10   |    $2    |
|       A       | 10-20  |    $1    |
+---------------+--------+----------+
|       B       | 0-10   |    $3    |
|       B       | 10-20  |    $2    |
+---------------+--------+----------+
|       C       | 0-10   |    $4    |
|       C       | 10-20  |    $3    |
+---------------+--------+----------+

产品与ADDON价格

+---------------+----------+----------+
|    Product    |  AddOn   |  Price   |
+---------------+----------+----------+
|       A       | 1        |    $2    |
|       A       | 2        |    $1    |
+---------------+----------+----------+
|       B       | 1        |    $3    |
|       B       | 2        |    $2    |
+---------------+----------+----------+
|       C       | 1        |    $4    |
|       C       | 2        |    $3    |
+---------------+----------+----------+
  • 产品设置为radio按钮
  • 插件设置为radio按钮
  • 数量设置为input字段

我的问题

如何根据人们从上面选择的内容计算产品成本。我目前有一个非常长的脚本来执行此操作,但我想优化并使用arrays2d arrays并以正确的方式执行此操作。 The current script is here

this is the webpage I have setup具有此功能。

提前多多谢谢!

1 个答案:

答案 0 :(得分:1)

拥有数量OB.qtty和无线电name="product"name="style"的数组,您可以找到哪些:checked并合并values即:{{1 (对于产品1)和p1(对于样式2)​​并获取s2价格数组OB["p1s2"]

现在(参见下面的示例)pric拥有此数组

pric

我们有预定义的数量范围[2.10, 2.00, 1.80, 1.60, 1.40]

OB.qtty

现在你需要做的就是:获得用户所需的物品数量;找出[ 50, 100, 150, 200, 250] 各自的范围键是什么 假设用户输入OB.qtty项数量,找出160密钥索引使用OB.qtty .some() MDN Docs (或者如果需要,创建一个for循环支持 IE< 9 )并使用该密钥索引将.some()转换为pric[qIdx]结果: itemPrice)。
要添加小数$ 1.8,请使用1.80

.tofixed(2)
var OB = {
  wrap : 0.05,
  // quantities
  qtty : [  50,  100,  150,  200,  250],
  // product 1
  p1s1 : [2.00, 1.80, 1.60, 1.40, 1.20],
  p1s2 : [2.10, 2.00, 1.80, 1.60, 1.40],
  p1s3 : [2.25, 2.15, 2.05, 1.95, 1.75],
  // product 2
  p2s1 : [3.00, 2.80, 2.60, 2.40, 2.20],
  p2s2 : [3.10, 3.00, 2.80, 2.60, 2.40],
  p2s3 : [3.50, 3.30, 3.00, 2.80, 2.50]
};

function calculate() {
  
  var pVal = $("[name=product]:checked").val();           // "p1", "p2" ?
  var sVal = $("[name=style]:checked").val();             // "s1", "s2", "s3" ?
  var qVal = parseInt($("[name=quantity]").val(), 10)||0; // quantity input
  var wVal = $("[name=wrap]:checked").val();              // (wrap) "yes", "no" ?
  var pric = OB[pVal+sVal]; // i.e: OB["p1s3"]            // (returns: array of prices)

  var qIdx = 0;
  OB.qtty.some(function(v, i) {
    qIdx = i;
    return v >= qVal;
  });
  
  var itemPrice = pric[qIdx];
  var wrapPrice =  wVal==="yes" ? (qVal * OB.wrap) : 0;
  var total = (qVal * itemPrice) + wrapPrice;
  
  $("[name=total]").val( total.toFixed(2) );
  
}

$("[name=product], [name=style], [name=wrap]").on("change", calculate);
$("[name=quantity]").on("input", calculate);
calculate();

请注意,上述情况并不理想,我宁愿向客户询问产品 vs 样式 vs 数量之间的数学关系。 (从一开始就让我困惑的是......)。否则你会发现你自己创造价格/风格阵列的负荷。

希望有所帮助......