假设我有一个具有不同项目价格的数组。
var myItemsEuro = [0.34, 0.11, 0.5, 0.33, 0.05, 0.13, 0.23, 3.22, 1.94]
我想有这样的功能:
function getTradeItems(0.89) { //The price of the item I want to buy
//Calculate, which of my items should be used to buy the item for 0.89€
return [0, 3, 6] //The position of my items in the array, which added together equal 0.90€
}
澄清一下:
我有一盒带有价格标签的物品(myItemsEuro)。我想购买一件物品,用我的物品作为付款。如果我多付至少一美分,对方将接受我的交易。该功能应该可以工作,所以我可以将其他人的价格传递给它(例如 0.89)并返回,我将不得不放弃哪些物品。这些项目的组合必须高于 0.89 美分(至少 0.9),但应尽可能低!
我对 JS 很陌生,我正在考虑计算我的项目的每一个组合,然后使用与购买价格差异最小的那个。这对我来说似乎真的很复杂,我什至不知道如何让它计算每个组合并保存用于计算的项目。
有什么方法可以更有效地实现这一点吗?我真的不希望这里有任何完美的工作代码,进入正确方向的一点帮助也会很好。
任何帮助表示赞赏!:)
编辑:
很抱歉错过了我自己的尝试。只是我根本不知道应该如何解决这个问题。不 - 不是家庭作业 - 这应该是我正在研究的 chromeextension 的一部分!
var myItemsEuro = [0.34, 0.11, 0.5, 0.33, 0.05, 0.13, 0.23, 3.22, 1.94]
function getTradeItems(marketPrice) {
var result = 0;
var positions = [];
for(i = 0; i < myItemsEuro.length; i++) {
result += myItemsEuro[i]; //add numbers from the array
positions.push(i); //save the used numbers position
if(result > marketPrice) { //if result is greater than marketPrice...
console.log(result)
console.log(positions)
return positions; //return positions in the array
}
}
}
getTradeItems(1.31);
编辑:
对数组进行排序然后将数字相加并没有给出解决方案。
var x = 1.18;
//Sorted by numbers
var myItemsEuro = [0.05, 0.11, 0.13, 0.20, 0.35, 0.50, 0.60, 0.69, 0.75];
//Add together and stop when sum > x:
0.05 + 0.11 + 0.13 + 0.20 + 0.35 + 0.50 = 1.34
//Best solution would be adding [6] and [8] from the array
0.50 + 0.69 = 1.19