问题描述
let data = [
{
"details": [
{
"Name": "DataSet1","Severity": "4","Cost": 20
},{
"Name": "DataSet2","Cost": 30
},{
"Name": "DataSet3","Cost": 25
}
],"charge": 45
}
];
在这里,我试图获得一个数组,使得 Cost 的总价值接近于收费。在这里,成本总和是 75,它大于 45,所以我尝试如下:
- 计算费用和总费用的差值,如果它大于费用,则从数组中删除元素,这样新数组的总费用总是小于或接近费用。所以,我的新数组应该是:
let newdata = [
{
"details": [
{
"Name": "DataSet1","charge": 50
}
];
有没有更好的方法来做到这一点? Javascript 是否具有执行此操作的任何内置功能?
解决方法
const data = {
"charge": 50,"details": [{
"Name": "DataSet1","Severity": "4","Cost": 20
},{
"Name": "DataSet2","Cost": 30
},{
"Name": "DataSet3","Cost": 25
}
],};
const getItemsAndDontGoAboveCharge =
(charge,list,start = 0,currentCost = 0,result = []) => {
if (start === list.length) return result
const {
Cost
} = list[start]
const nextTotal = currentCost + Cost
if (nextTotal > charge) return result
return getItemsAndDontGoAboveCharge(charge,start + 1,nextTotal,[...result,list[start]]);
}
console.log(getItemsAndDontGoAboveCharge(data.charge,data.details))