NodeJS如何合并重复QuestionGroupID数据,将optionItems转为数组
解决方案:合并相同QuestionGroupID的选项条目
核心逻辑是借助对象映射缓存已处理的分组,遍历原始数据时完成选项合并,最后将缓存对象转为目标数组格式:
处理代码示例
// 示例数据库查询返回的原始数据 const dbRawResults = [ { QuestionGroupID: 1, QuestionDescription: "偏好设置", OptionDescription: "自动模式" }, { QuestionGroupID: 1, QuestionDescription: "偏好设置", OptionDescription: "手动模式" }, { QuestionGroupID: 2, QuestionDescription: "权限选择", OptionDescription: "只读权限" } ]; // 分组合并逻辑 const groupMap = {}; dbRawResults.forEach(item => { const groupKey = item.QuestionGroupID; if (groupMap[groupKey]) { // 分组已存在,追加选项到数组 groupMap[groupKey].optionItems.push(item.OptionDescription); } else { // 分组不存在,初始化新条目 groupMap[groupKey] = { QuestionGroupID: groupKey, QuestionDescription: item.QuestionDescription, optionItems: [item.OptionDescription] }; } }); // 转换为最终数组格式 const finalResult = Object.values(groupMap);
输出结果
[ { "QuestionGroupID": 1, "QuestionDescription": "偏好设置", "optionItems": ["自动模式", "手动模式"] }, { "QuestionGroupID": 2, "QuestionDescription": "权限选择", "optionItems": ["只读权限"] } ]
注意事项
- 若原始数据中同一
QuestionGroupID对应不同的QuestionDescription,当前逻辑会取第一条的描述值,可根据业务需求添加额外判断(如抛出提示、统一覆盖或保留全部描述) - 若使用异步数据库查询,需确保在获取到完整的
dbRawResults后再执行上述合并逻辑
内容的提问来源于stack exchange,提问作者denise
相关产品推荐
相关产品推荐

