Javascript 如何按类别获取具有最小值的对象
我相信我有一个javascript对象数组,如下所示,我正在尝试筛选出每个项目的最低价格: 拥有:Javascript 如何按类别获取具有最小值的对象,javascript,Javascript,我相信我有一个javascript对象数组,如下所示,我正在尝试筛选出每个项目的最低价格: 拥有: 常数=[ {id:1,水果:“苹果”,商店:“商店1”,价格:1}, {id:2,水果:“苹果”,商店:“商店2”,价格:1.25}, {id:3,水果:“香蕉”,商店:“商店1”,价格:0.5}, {id:4,水果:“香蕉”,商店:“商店2”,价格:0.75}, {id:5,水果:“香蕉”,商店:“商店3”,价格:0.75} ]; 想要: [ {id:1,水果:“苹果”,商店:“商店1”,价格
常数=[
{id:1,水果:“苹果”,商店:“商店1”,价格:1},
{id:2,水果:“苹果”,商店:“商店2”,价格:1.25},
{id:3,水果:“香蕉”,商店:“商店1”,价格:0.5},
{id:4,水果:“香蕉”,商店:“商店2”,价格:0.75},
{id:5,水果:“香蕉”,商店:“商店3”,价格:0.75}
];
想要:
[
{id:1,水果:“苹果”,商店:“商店1”,价格:1},
{id:3,水果:“香蕉”,商店:“商店1”,价格:0.5}
];
我设想在SQL中,这可以通过一个group by语句来实现,例如“select FROUT,min(price)from table group by FROUT”,但我不确定如何在当前的对象形式中实现这一点
我正在寻找一个JavaScript解决方案,但如果需要,我愿意改变数据结构或使用框架。如果相关的话,我已经在使用React.js了。有什么指导吗?您可以通过一个操作来完成,创建一个类别(水果
)到最低价格记录
比如说
常数=[
{id:1,水果:“苹果”,商店:“商店1”,价格:1},
{id:2,水果:“苹果”,商店:“商店2”,价格:1.25},
{id:3,水果:“香蕉”,商店:“商店1”,价格:0.5},
{id:4,水果:“香蕉”,商店:“商店2”,价格:0.75},
{id:5,水果:“香蕉”,商店:“商店3”,价格:0.75}
]
const result=[…fruits.reduce((映射,条目)=>{
//检查现有记录,以及它是否有更高的价格
如果(!map.has(entry.fruit)| map.get(entry.fruit.price>entry.price){
//设置此类别的新记录
地图集(entry.fruit,entry)
}
返回图
},new Map()).values()]//现在只需获取值
console.info(result)
您可以通过一个操作来完成此操作,创建一个类别(水果
)到最低价格记录
比如说
常数=[
{id:1,水果:“苹果”,商店:“商店1”,价格:1},
{id:2,水果:“苹果”,商店:“商店2”,价格:1.25},
{id:3,水果:“香蕉”,商店:“商店1”,价格:0.5},
{id:4,水果:“香蕉”,商店:“商店2”,价格:0.75},
{id:5,水果:“香蕉”,商店:“商店3”,价格:0.75}
]
const result=[…fruits.reduce((映射,条目)=>{
//检查现有记录,以及它是否有更高的价格
如果(!map.has(entry.fruit)| map.get(entry.fruit.price>entry.price){
//设置此类别的新记录
地图集(entry.fruit,entry)
}
返回图
},new Map()).values()]//现在只需获取值
console.info(结果)
对象分配和减少:
常数=
[{id:1,水果:“苹果”,商店:“商店1”,价格:1}
,{id:2,水果:“苹果”,商店:“商店2”,价格:1.25}
,{id:3,水果:“香蕉”,商店:“商店1”,价格:0.5}
,{id:4,水果:“香蕉”,商店:“商店2”,价格:0.75}
,{id:5,水果:“香蕉”,商店:“商店3”,价格:0.75}
]
const mini=水果。减少((a,c)=>
{
设x=a.find(e=>e.fruit==c.fruit)
if(!x)a.push(Object.assign({},c))
如果(x.price>c.price)Object.assign(x,c)
归还
},[])
console.log(迷你版)
对象分配和减少:
常数=
[{id:1,水果:“苹果”,商店:“商店1”,价格:1}
,{id:2,水果:“苹果”,商店:“商店2”,价格:1.25}
,{id:3,水果:“香蕉”,商店:“商店1”,价格:0.5}
,{id:4,水果:“香蕉”,商店:“商店2”,价格:0.75}
,{id:5,水果:“香蕉”,商店:“商店3”,价格:0.75}
]
const mini=水果。减少((a,c)=>
{
设x=a.find(e=>e.fruit==c.fruit)
if(!x)a.push(Object.assign({},c))
如果(x.price>c.price)Object.assign(x,c)
归还
},[])
console.log(mini)
groupBy
是一个很好的常用操作。我会先用它把物体按水果分类。第二个reduce(minInArray
)也是在数组中查找最小值或最大值的常用形式。它们一起产生每种水果类型的最小值
constgroupby=(数组,键)=>{
返回数组.reduce(函数(r,a){
r[a[key]]=r[a[key]| | |【】
r[a[键]。按(a)
返回r
}, {})
}
常量minInArray=(数组,键)=>{
返回数组。减少((上一个,当前)=>{
返回上一个[键]<当前[键]?上一个:当前
})
}
常数=[{
id:1,
水果:“苹果”,
商店:“商店1”,
价格:1
}, {
id:2,
水果:“苹果”,
商店:“商店2”,
价格:1.25
}, {
id:3,
水果:“香蕉”,
商店:“商店1”,
价格:0.5
}, {
id:4,
水果:“香蕉”,
商店:“商店2”,
价格:0.75
}, {
id:5,
水果:“香蕉”,
商店:“商店3”,
价格:0.75
}];
let groups=groupBy(水果,水果)
让minPrices=Object.keys(groups.map)(水果=>{
返回minInArray(组[水果],“价格”)
})
log(minPrices)
groupBy
是一个很好的常用操作。我会先用它把物体按水果分类。第二个reduce(minInArray
)也是在数组中查找最小值或最大值的常用形式。它们一起产生每种水果类型的最小值
constgroupby=(数组,键)=>{
返回数组.reduce(函数(r,a){
r[a[key]]=r[a[key]| | |【】
r[a[键]。按(a)
返回r
}, {})
}
常量minInArray=(数组,键)=>{
返回数组。减少((上一个,当前)=>{
返回上一个[键]<当前[键]?上一个:当前
})
}
常数=[{
id:1,
水果:“苹果”,
商店:“商店1”,
价格:1
}, {
id:2,
水果:“苹果”,
商店:“商店2”,
价格:1.25
}, {
id:3,
水果:“香蕉”,
商店:“商店1”,
价格:0.5
}, {
id:4,
水果:“香蕉”,
商店:“商店2”,
价格:0.75
}, {
id:5,
F