我有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
字段我的问题
如何根据人们从上面选择的内容计算产品成本。我目前有一个非常长的脚本来执行此操作,但我想优化并使用arrays
或2d arrays
并以正确的方式执行此操作。 The current script is here
this is the webpage I have setup具有此功能。
提前多多谢谢!
答案 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 数量之间的数学关系。 (从一开始就让我困惑的是......)。否则你会发现你自己创造价格/风格阵列的负荷。
希望有所帮助......