我有一个对象数组和一个数字,如下所示:
var offers = [{
quantity_needed: 5,
price: 1200
}, {
quantity_needed: 8,
price: 1400
}, {
quantity_needed: 10,
price: 1500
}];
var quantity = 9;
我想使用尽可能高的数字来计算报价中的价格组。
假设我有 25,这意味着我从数组中取出了 10 两次,并从数组中取出了 5 一次,创建了 25.
如果我有19,那就是10一次,8一次,剩下1。
到目前为止,我已经成功地做到了这一点,这将返回最接近的结果,并且我只会得到最高的结果。
function discount(offers, quantity) {
var found = [];
offers.map(function (e) {
found.push(Math.floor(quantity / e.quantity_needed) * e.quantity_needed);
});
return found;
}
discount(offers, 9) //Would return [5, 8, 0]
discount(offers, 15) //Would return [15, 8, 10] which is wrong
我希望它返回类似的内容,
discount(offers, 16) //{10: 1, 8: 0, 5: 1, remainder: 1}
discount(offers, 25) //{10: 2, 8: 0, 5: 1, remainder: 0}
最佳答案
这可能就是您正在寻找的。您可以根据需要修改代码。逻辑应该保持不变。
var quantity_needed={10,8,5}; // extract quatity needed into sorted int values
var quantity = 9;
var found={};
for(var i=0; i<quantity_needed.length; i++){
var temp=quantity_needed[i];
while(quantity>temp){
quantity=quantity-temp;
found.push(temp);
}
}
这里我们从数量中减去可能的最大数量,除非数量变得小于数量。然后我们转向下一个所需的数量。这种方法的唯一缺点是您必须对 amount_needed 数组进行排序。
关于javascript - 计算一个数中有多少个数的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23991826/