如何按title分组嵌套JSON数组并限制每组value元素数量为2?
问题描述
给定如下JSON数据:
{ "id": "1", "category": "education", "field": "science", "items": [ { "title": "item 1", "value": "10" }, { "title": "item 1", "value": "102" }, { "title": "item 2", "value": "12" }, { "title": "item 1", "value": "19" }, { "title": "item 1", "value": "13" }, { "title": "item 2", "value": "149" } ] }
需要完成以下转换:
- 移除
id字段 - 将
items数组按title分组 - 同一
title对应的value合并为数组,且仅保留前2个元素
最终目标结构:
{ "category": "education", "field": "science", "items": [ { "title": "item 1", "value": [ "10", "102" ] }, { "title": "item 2", "value": [ "12", "149" ] } ] }
解决方案(JavaScript)
通过以下步骤实现转换:
- 解构原对象剔除
id字段,保留剩余核心字段 - 用映射表按
title分组收集value,仅保留每组前2个值 - 将映射表转换为目标格式的
items数组
代码实现:
const originalData = { "id": "1", "category": "education", "field": "science", "items": [ { "title": "item 1", "value": "10" }, { "title": "item 1", "value": "102" }, { "title": "item 2", "value": "12" }, { "title": "item 1", "value": "19" }, { "title": "item 1", "value": "13" }, { "title": "item 2", "value": "149" } ] }; // 剔除id字段 const { id, ...processedData } = originalData; // 分组处理items,保留每组前2个value const groupMap = processedData.items.reduce((map, item) => { if (!map[item.title]) map[item.title] = []; if (map[item.title].length < 2) { map[item.title].push(item.value); } return map; }, {}); // 转换为目标items结构 processedData.items = Object.entries(groupMap).map(([title, value]) => ({ title, value })); console.log(JSON.stringify(processedData, null, 2));
运行代码后即可得到符合要求的JSON结果。
内容的提问来源于stack exchange,提问作者bitu
相关产品推荐
相关产品推荐

