如何根据Javascript中另一个元素值的元素值总数添加/删除元素

如何根据Javascript中另一个元素值的元素值总数添加/删除元素,javascript,arrays,json,javascript-objects,Javascript,Arrays,Json,Javascript Objects,我正在尝试根据另一个值的总计数从数组中添加/删除元素 let data = [ { "details": [ { "Name": "DataSet1", "Severity": "4", "Cost": 20 }, { "Name": "DataSet2"

我正在尝试根据另一个值的总计数从数组中添加/删除元素

let data = [
    {
  "details": [
    {
      "Name": "DataSet1",
      "Severity": "4",
      "Cost": 20
    },
    {
      "Name": "DataSet2",
      "Severity": "4",
      "Cost": 30
    },
    {
      "Name": "DataSet3",
      "Severity": "4",
      "Cost": 25
    }
  ],
  "charge": 45
}
];
在这里,我试图得到一个数组,这样的总价值的成本是接近收费。这里,成本之和是75,大于45,所以我尝试如下:

  • 计算费用和总成本之间的差额,若它大于费用,则从阵列中移除元素,这样新阵列的总成本总是小于或接近费用。因此,我的新阵列应该是:
  • 有没有更好的办法?Javascript是否有任何内置的功能可以做到这一点?

    const数据={
    “费用”:50,
    “详情”:[{
    “名称”:“数据集1”,
    “严重性”:“4”,
    “成本”:20
    },
    {
    “名称”:“数据集2”,
    “严重性”:“4”,
    “成本”:30
    }, {
    “名称”:“数据集3”,
    “严重性”:“4”,
    “费用”:25
    }
    ],
    };
    常量GetItems和DontGoaboveCharge=
    (费用,列表,开始=0,当前成本=0,结果=[])=>{
    if(start==list.length)返回结果
    常数{
    成本
    }=列表[开始]
    const nextTotal=当前成本+成本
    如果(nextTotal>charge)返回结果
    返回getItems和dontgoaboveCharge(charge,list,start+1,nextTotal,[…result,list[start]]);
    }
    console.log(getItemsAndDontGoAboveCharge(data.charge,data.details))
    const数据={
    “费用”:50,
    “详情”:[{
    “名称”:“数据集1”,
    “严重性”:“4”,
    “成本”:20
    },
    {
    “名称”:“数据集2”,
    “严重性”:“4”,
    “成本”:30
    }, {
    “名称”:“数据集3”,
    “严重性”:“4”,
    “费用”:25
    }
    ],
    };
    常量GetItems和DontGoaboveCharge=
    (费用,列表,开始=0,当前成本=0,结果=[])=>{
    if(start==list.length)返回结果
    常数{
    成本
    }=列表[开始]
    const nextTotal=当前成本+成本
    如果(nextTotal>charge)返回结果
    返回getItems和dontgoaboveCharge(charge,list,start+1,nextTotal,[…result,list[start]]);
    }
    
    console.log(getItemsAndDontGoAboveCharge(data.charge,data.details))
    比什么好?不,这听起来像是一个非常具体的场景。您必须使用循环在
    详细信息
    数组上循环,并确定应删除数组中的哪个条目。你能展示你的尝试吗?比使用多个循环更好。比什么更好?不,这听起来像是一个非常具体的场景。您必须使用循环在
    详细信息
    数组上循环,并确定应删除数组中的哪个条目。你能展示你的尝试吗?比使用多个循环更好。它很有效,谢谢!据我所知,有没有其他方法可以使用切片和reduce函数来实现这一点?有,但这并不好,因为filter/reduce遍历整个数组,并且没有办法阻止它们。因此,您最终将遍历您不需要的项目,这显然对性能不好。谢谢!据我所知,有没有其他方法可以使用切片和reduce函数来实现这一点?有,但这并不好,因为filter/reduce遍历整个数组,并且没有办法阻止它们。因此,您最终将遍历不需要的项,这显然不利于性能
    let newdata = [
        {
      "details": [
        {
          "Name": "DataSet1",
          "Severity": "4",
          "Cost": 20
        },
        {
          "Name": "DataSet3",
          "Severity": "4",
          "Cost": 25
        }
      ],
      "charge": 50
    }
    ];