JSON数据格式转换需求:按分类聚合多版本对象
解决JSON数组按分类分组转换的问题
需求
将包含单分类对象的数组,转换为以分类名为键、对应分类的所有版本详情列表为值的对象,同时需要将id转为字符串,替换last_sync_date字段值。
输入示例
const inputData = [ { "category1": { "name": "category1", "id": 1, "last_sync_date": "None", "version": "Version 1" } }, { "category1": { "name": "category1", "id": 2, "last_sync_date": "None", "version": "Version 2" } }, { "category2": { "name": "category2", "id": 1, "last_sync_date": "None", "version": "Version 1" } }, { "category3": { "name": "category3", "id": 2, "last_sync_date": "None", "version": "Version 2" } } ];
输出示例
{ "category1": [ { "id": "1", "name": "category1", "last_sync_date": "01/01/2022 10:45 AM", "version": "Version 1" }, { "id": "2", "name": "category1", "last_sync_date": "01/01/2022 10:45 AM", "version": "Version 2" } ], "category2": [ { "id": "1", "name": "category2", "last_sync_date": "01/01/2022 10:45 AM", "version": "Version 1" } ], "category3": [ { "id": "2", "name": "category3", "last_sync_date": "01/01/2022 10:45 AM", "version": "Version 2" } ] }
解决方案(JavaScript)
使用数组的reduce方法遍历分组,同时处理字段格式:
const transformData = (data) => { return data.reduce((acc, item) => { // 获取当前项的分类名称和详情数据 const category = Object.keys(item)[0]; const detail = item[category]; // 处理字段:id转字符串,替换last_sync_date const processedDetail = { ...detail, id: String(detail.id), last_sync_date: "01/01/2022 10:45 AM" }; // 初始化分类数组并添加数据 if (!acc[category]) { acc[category] = []; } acc[category].push(processedDetail); return acc; }, {}); }; // 执行转换 const outputData = transformData(inputData); console.log(outputData);
代码说明
- 遍历分组:通过
reduce方法累加构建目标对象,初始值为空对象 - 提取分类:每个数组元素只有一个键(分类名),用
Object.keys(item)[0]快速获取 - 字段处理:复制原详情对象,将
id转为字符串,替换last_sync_date为指定值 - 数组构建:如果分类不存在于目标对象中,先初始化空数组,再将处理后的详情推入
内容的提问来源于stack exchange,提问作者saikumar305
相关产品推荐
相关产品推荐

