javascript - 基于对象数组中唯一键的分组
问题描述
我正在做一个小型的 React 项目,此时我陷入了困境。我需要根据数组对象键进行分组。
下面是数组:
let addOnFeatures = [
{"name": "feature1", id: 101, cost: 100},
{"name": "feature2", id: 102, cost: 200},
{"name": "feature1", id: 103, cost: 300},
{"name": "feature3", id: 104, cost: 40}
]
我需要根据名称键进行分组,以便与通用名称相关的每个 id 都应显示在其自己的选项卡上。
预期输出应该像
*uniqueFeaturename
id: cost
例子:
1. feature1
101 : 100
103 : 300
2. feature2
102 : 200
3. feature3
104: 40
解决方案
只需使用Array.prototype.reduce
并向对象添加元素,例如
let addOnFeatures = [
{"name": "feature1", id: 101, cost: 100},
{"name": "feature2", id: 102, cost: 200},
{"name": "feature1", id: 103, cost: 300},
{"name": "feature3", id: 104, cost: 40}
]
const res = addOnFeatures.reduce((acc, item) => {
if(acc[item.name]) {
acc[item.name] = {...acc[item.name], [item.id]: item.cost};
} else {
acc[item.name] = {[item.id]: item.cost};
}
return acc;
}, {});
console.log(res);
推荐阅读
- c# - 如何退出xml文件
- highcharts - 如何在不重叠的情况下显示所有时间线 Highcharts 数据?
- r - 计算年化内部收益率
- javascript - 为字符串中的相同元素着色
- perl - 防止在具有原始数据库密码的 perl 脚本中的日志中打印异常
- excel - 不当使用财产
- microsoft-graph-api - Microsoft Graph API - 查询班次时出现未知错误
- asp.net-mvc - Syncfusion Treeview 未在 ASP.Net MVC5 中呈现
- java - 如何每小时强制触发分布式 GC(System.gc())?
- python - 如何合并 Pandas 中的列?