TypeScript中合并name属性相同的数组对象方法咨询
使用reduce合并相同name的series数组
你完全可以用reduce方法实现这个合并逻辑,以下是具体代码:
const values = [ { "name": "Patient Introductions", "series": [{"name": "Organization ABC", "value": 3}] }, { "name": "Patient Assessment", "series": [{"name": "Organization ABC", "value": 2.5}] }, { "name": "Patient Introductions", "series": [{"name": "Organization XYZ", "value": 2.5}] }, { "name": "Patient Assessment", "series": [{"name": "Organization XYZ", "value": 3.3}] } ]; const output = Object.values(values.reduce((acc, item) => { // 检查累加器中是否已有当前name对应的条目 if (acc[item.name]) { // 合并series数组 acc[item.name].series = acc[item.name].series.concat(item.series); } else { // 若没有,添加新条目到累加器 acc[item.name] = {...item}; // 解构创建新对象,避免修改原数组元素 } return acc; }, {})); console.log(output);
逻辑解释:
- 初始化累加器:
reduce的第二个参数是初始值,这里用空对象{},用来存储以name为键、合并后的对象为值的映射。 - 遍历处理每个元素:
- 如果当前元素的
name已经在累加器中存在,就用concat把当前元素的series数组合并到已有条目的series里。 - 如果不存在,就把当前元素解构后存入累加器(用
{...item}是为了创建新对象,避免后续操作修改原数组的元素)。
- 如果当前元素的
- 转换为目标数组:最后用
Object.values()提取累加器中的所有值,得到你需要的格式数组。
内容的提问来源于stack exchange,提问作者ganesh
相关产品推荐
相关产品推荐

