我遇到了一个我要处理给定值并检查此值是否大于我的值数组的问题,如果是,请使用我的数组合并输出。
例如。
我的数组总是:
const ArrayPrimitive = [100,50,20,10];
例如输入中的给定值:
我已经开始发展,但在检查价值是否有效后,我仍然坚持如何处理剩下的事情。
const ArrayPrimitive = [100,50,20,10];
var combination = [];
$(document).ready(function(){
$(".btn-submit").on("click",function(){
var amountOfMoney = document.getElementById('amountOfMoney').value;
for(let i=0; i=ArrayPrimitive.length;i++){
if(amountOfMoney=ArrayPrimitive[i]){
combination.push(amountOfMoney);
}
while(amountOfMoney > ArrayPrimitive[i]){
var k = amountOfMoney/ArrayPrimitive[i];
for(let j=0; j = k; j++){
combination.push(ArrayPrimitive[i]);
amountOfMoney = amountOfMoney - ArrayPrimitive[i];
}
var rest = n % ArrayPrimitive[i];
}
}
});
});
我的主要问题是:
.map
或其他功能可以挽救我的生命,有人可以在这一点上启发我吗?我希望我能说清楚。
https://jsfiddle.net/v748ha08/1/
更新:感谢@Malk的回答,但只有当您不必合并子集的多个值时,您的解决方案才能提供正确的答案。
e.g。 参赛作品:200.00 结果:[100.00,100.00]
在这种情况下,我的子集中需要2个值为100,当我测试它时,它们的函数会抛出错误。
答案 0 :(得分:2)
如果你想在整个过程中迭代一个数组并建立一个对象(或其他任何东西),那么Array.reduce()
就是你要走的路。
const ArrayPrimitive = [100, 95, 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);
&#13;