Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按类别获取具有最小值的对象_Javascript - Fatal编程技术网

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”,价格

我相信我有一个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”,价格: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