我想在每个名为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内部的对象内部进行迭代。
您可以过滤礼物并继续移除最昂贵的礼物,直到有钱可以买为止:
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] 删除。
我来说两句