如何按水果名称分组获取对象数组中quantity的最小值
按水果名称分组获取最小数量的解决方案
直接用reduce一步实现
你可以通过reduce方法直接完成分组和最小值计算,这是最高效的方式,不需要额外的map操作:
const minQuantities = fruits.reduce((acc, curr) => { // 若当前水果未记录,或当前数量比已存最小值更小,则更新 if (!acc[curr.fruitname] || curr.quantity < acc[curr.fruitname]) { acc[curr.fruitname] = curr.quantity; } return acc; }, {}); console.log(minQuantities); // 输出结果:{ apple: 11, strawberries: 7, pear: 33, plum: 15, grapes: 43 }
代码逻辑说明
- 初始化累加器
acc为空对象,用来存储每个水果对应的最小数量 - 遍历数组中的每个水果对象
curr:- 检查当前水果名称是否未在
acc中,或者当前的quantity比acc中已存储的值更小 - 满足条件时,将
acc中该水果对应的数量更新为当前的quantity
- 检查当前水果名称是否未在
- 遍历结束后,
acc就是你需要的分组最小数量结果
备选实现:先分组再计算最小值
如果习惯先把同组数据收集起来再处理,也可以先分组,再对每组数量取最小值:
// 第一步:按水果名称分组,收集所有数量 const groupedQuantities = fruits.reduce((acc, curr) => { acc[curr.fruitname] = [...(acc[curr.fruitname] || []), curr.quantity]; return acc; }, {}); // 第二步:对每组数量取最小值,转换为目标格式 const minQuantities = Object.fromEntries( Object.entries(groupedQuantities).map(([fruit, quantities]) => [fruit, Math.min(...quantities)]) );
内容的提问来源于stack exchange,提问作者pyguypy
相关产品推荐
相关产品推荐

