如何删除数组对象中数组内部的项目?javascript

狐狸

我想在每个名为sumP的presentsData对象内添加一个字段,并用礼物项sum填充它

第二个目标,如果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:我很难找到的是找出如何在presents,array内部的对象内部进行迭代

拉梅什·雷迪(Ramesh Reddy)

您可以过滤礼物并继续移除最昂贵的礼物,直到有钱可以买为止:

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 withSumP = presentsData.map(s => {
  return { ...s,
    sumP: s.presents.reduce((acc, p) => acc + pricesMap.get(p), 0)
  }
})

console.log(withSumP) //this is presentsData result after adding the field sumP

const mostExpensive = (arr) => {
  return arr.reduce((acc, el) => {
    if (pricesMap.get(el) > pricesMap.get(acc)) {
      return el
    }
    return acc;
  })
}

// If you want to remove the most expensive present once for each element
const result = withSumP.map((el) => {
  if (el.sumP > el.money) {
    const presentToDelete = mostExpensive(el.presents);
    return { ...el,
      presents: el.presents.filter(p => p !== presentToDelete)
    }

  }
  return el;
})

console.log(result);

// If you want to delete presents until you can buy them and also update sumP to be in sync with the presents:

const resultAlt = withSumP.map((el) => {
  let updatedPresents = [...el.presents];
  let updatedSumP = el.sumP;
  while ((updatedSumP > el.money) && (updatedPresents.length > 0)) {
    const presentToDelete = mostExpensive(updatedPresents);
    updatedPresents = updatedPresents.filter(p => p !== presentToDelete);
    updatedSumP -= pricesMap.get(presentToDelete);
  }
  return { ...el,
    presents: updatedPresents,
    sumP: updatedSumP
  };
})

console.log(resultAlt)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章