首页 > 解决方案 > 如何删除数组对象中数组内的项目?javascript

问题描述

我想在每个 presentData 对象中添加一个名为 sumP 的字段礼物项目总和填充它。

第二个目标,如果sumP > money我想删除里面最昂贵的项目它不起作用

const presentsData= [
        {
          name: "Peter",
          presents: ["coffee","holidays"],
          money: 7000
        },
        {
          name: "Mario",
          presents: ["car","coal"],
          money: 300
        },
        {
          name: "Amanda",
          presents: ["computer","coal"],
          money: 300
        },
        {
          name: "David",
          presents: ["clothes", "car"],
          money: 2000
        }
    ]
    const prices= [
        {
          present: "coffee",
          price: 1
        },
        {
          present: "holidays",
          price: 1000
        },
        {
          present: "videogames",
          price: 40
        },
        {
          present: "computer",
          price: 600
        },
        {
          present: "tattoo",
          price: 30
        },
        {
          present: "clothes",
          price: 80
        },
        {
          present: "car",
          price: 6000
        },
        {
          present: "phone",
          price: 800
        },
        {
          present: "motorbike",
          price: 3500
        },
         {
          present: "coal",
          price: 0
        }
      ]
    
    const pricesMap = new Map(prices.map(({ present, price }) => [present, price]))
    
    const res1 =  presentsData.map(s=>{
    return {...s,
           sumP: s.presents.reduce((acc, p) => acc + pricesMap.get(p),0)
           }
    })
    
     console.log("this is res1=>",res1) //this is presentsData result after adding the field sumP
    
    console.log(pricesMap)
    
    const res2 = res1.map((r)=>{
      if(r.sumP > r.money){
      ( /* would like to delete the item  inside "presents" with the bigger price using pricesMap */)
      }
    })
    
    console.log(res2)

pd:我发现很难找出如何在数组中迭代礼物,数组内的对象内的数组。

标签: javascriptarraysobjectiteration

解决方案


const deleteMostExpensive = (array, prices) => {
    let res = [];
    let mostEspensive = array[0];
    array.forEach(product => {
        let cur = prices.find(p => p.present == product)
        if (cur.price > mostEspensive.price)
            mostEspensive = cur;
    })

    array.forEach(e => {
        if (e != mostEspensive.present)
            res.push(e);
    })

    return res;
}


const calculSumP = (elt, prices) => {
    r = 0;
    elt.presents.forEach(e => {
        r += prices.find(c => c.present == e).price;
    })
    return r;
}


presentsData.forEach(elt => {
    elt.sumP = calculSumP(elt, prices);

   while (elt.sumP > elt.money) {
       let newPresents = deleteMostExpensive(elt.presents, prices);
       elt.presents = newPresents;
       elt.sumP = calculSumP(elt, prices)
   }
})

推荐阅读