javascript - 计算一个数中有多少个数的倍数

标签 javascript

我有一个对象数组和一个数字,如下所示:

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/

相关文章:

javascript - 造型 Angular 垫-根据条件选择

javascript - 全局打开/关闭 CSS

javascript - 如何在 .ascx 文件中使用 onload 属性

javascript - 如何在D3中旋转图形?

javascript - 我似乎无法更新 javascript/typescript 中数组中对象字段的值?

javascript - 定义类后 undefined object

javascript - Laravel API 是否可以使用 Node API,并且该 Node API 在请求中调用相同的 Laravel API?

javascript - Webpack 2 - 代码拆分顶级依赖

javascript - 在 PhpStorm/Webstorm 中导入不使用 JavaScript

javascript - 如何创建像树这样的预期对象