我遇到了一个问题,我必须处理给定值并检查该值是否大于我的值数组,如果是,则使用我的数组合并输出。我已经在这里问过类似的问题:Store values in an array after treat the values from another array
重要注意事项,我想尽可能重复这些子集。我的解决方案仅提供不同数量的子集的组合。
例如。
我的数组永远是:
const ArrayPrimitive = [100,50,20,10];
例如输入中的给定值:
- 输入:30.00 结果:[20.00, 10.00]
- 输入:80.00 结果:[50.00, 20.00, 10.00]
- 条目:125.00 结果:抛出 NoteUnavailableException
- 条目:-130.00 结果:抛出 InvalidArgumentException
- 条目:NULL 结果:[空集]
条目:200 预期结果:[100.00, 100.00]* 这是我陷入困境的地方,我想组合子集的相同值(我的数组
在使用较小的数字之前尽可能多地使用原始值。在这种情况下,我的子集中需要 2 个 100 的值,当我测试这个时,它们的函数会抛出一个错误。
const ArrayPrimitive = [100, 50, 20, 10]; // Assuming presorted array(descending) function findChange(m) { return ArrayPrimitive.reduce((mm, c) => { if (mm.rest >= c) { mm.change.push(c); mm.rest -= c } return mm }, { change: [], rest: m }); } function findChangeOld(m) { var retval = { change: [], rest: m }, i = ArrayPrimitive.length; for (var x = 0; x < i; x++) { if (retval.rest >= ArrayPrimitive[x]) { retval.change.push(ArrayPrimitive[x]) retval.rest -= ArrayPrimitive[x]; } } return retval; } function calcChange(v) { var c = findChangeOld(v); if (v < 0 || isNaN(v)) { console.log('${v}: throw InvalidArgumentException'); return; } if (c.rest > 0) console.log('${v}: throw NoteUnavailableException'); else console.log('${v}: ${c.change}'); } calcChange(30); calcChange(80); calcChange(105); calcChange(125); calcChange(-130); calcChange(null);
我希望我已经说清楚了。
最佳答案
当您向此提交“270”时,您会得到一个数组 [ 100, 100, 50, 20 ]。
我会将异常(exception)和边缘情况留给您来设置防护。但这似乎满足您所有简单的情况。
let arr = [100,50,20,10];
let factors = [];
let total = 270;
arr.forEach ( d => {
while ( total >= d ) {
factors.push ( d );
total -= d;
}
} );
// [100, 100, 50, 20]
console.log ( factors );
关于javascript - 尽可能使用重复值存储数组的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743831/