JavaScript:按匹配QId键合并对象数组的answer字段
合并相同QId的对象answer字段实现方案
这个需求太常见啦!咱们用JavaScript就能轻松搞定,核心思路是先按QId分组,把相同ID的answer字段拼接起来,最后再转成目标数组。直接上代码示例:
首先定义你的原始数组:
const originalData = [ {"QId":"2030","answer":"~4591^Pain"}, {"QId":"2030","answer":"~4592^Bad Breath"}, {"QId":"2153","answer":"~5106^2ede"}, {"QId":"2152","answer":"~5102^24fgf"}, {"QId":"2154","answer":"~5109^No"}, {"QId":"2152","answer":"~5109^New Answer"} ];
然后用reduce方法完成分组和合并:
const mergedData = Object.values( originalData.reduce((groupedObj, currentItem) => { // 检查当前QId是否已经在分组对象中存在 if (groupedObj[currentItem.QId]) { // 存在的话直接拼接answer字段 groupedObj[currentItem.QId].answer += currentItem.answer; } else { // 不存在的话,浅拷贝当前对象存入分组(避免修改原数组对象) groupedObj[currentItem.QId] = {...currentItem}; } return groupedObj; }, {}) // 初始值是一个空对象,用来存分组结果 ); console.log(mergedData);
代码逻辑解释:
reduce遍历原始数组,用groupedObj这个临时对象按QId做分组键;- 遇到已存在的
QId,就把当前项的answer拼接到对应对象的answer后面; - 遇到新的
QId,就把当前对象的副本存入分组对象(用{...currentItem}浅拷贝,防止后续修改影响原数组); - 最后用
Object.values()把分组对象的所有值提取出来,转成你想要的数组格式。
运行这段代码后,输出结果就完全符合你的要求啦!
内容的提问来源于stack exchange,提问作者user7420795
相关产品推荐
相关产品推荐

