You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并含重复title的对象数组?Section List分页数据合并方案

嘿,这个场景我太熟悉了——用Section List做分页加载时,很容易碰到新旧数据里有重复日期分组的情况。核心就是把相同title对应的data数组合并,同时保留唯一的分组项。我给你两个实用的解决方案:

首先先定义好我们的源数据,方便测试:

// 首次获取的数据
const firstData = [
  { title: '28/01/2020', data: [{location: 'madrid', city: 'madrid'}, {location: 'barcelona', city: 'barcelona'}] },
  { title: '29/01/2020', data: [{location: 'rabat', city: 'rabat'}, {location: 'alger', city: 'alger'}] }
];

// 第二次获取的数据
const secondData = [
  { title: '29/01/2020', data: [{location: 'london', city: 'london'}, {location: 'rio', city: 'rio'}] },
  { title: '30/01/2020', data: [{location: 'new york', city: 'new york'}, {location: 'roma', city: 'roma'}] }
];
方法一:使用临时对象映射(直观易读)

这种方式逻辑清晰,适合新手理解,用title作为唯一键来快速判断分组是否已存在:

// 创建一个临时映射对象,用title作为键存储分组数据
const mergedMap = {};

// 处理首次加载的数据
firstData.forEach(item => {
  if (mergedMap[item.title]) {
    // 如果该分组已存在,合并data数组(用扩展运算符避免修改原数据)
    mergedMap[item.title].data = [...mergedMap[item.title].data, ...item.data];
  } else {
    // 如果分组不存在,直接存入映射对象(复制对象避免引用问题)
    mergedMap[item.title] = {...item};
  }
});

// 处理第二次加载的数据,逻辑和上面一致
secondData.forEach(item => {
  if (mergedMap[item.title]) {
    mergedMap[item.title].data = [...mergedMap[item.title].data, ...item.data];
  } else {
    mergedMap[item.title] = {...item};
  }
});

// 把映射对象的值转换成数组,就是最终的合并结果
const finalData = Object.values(mergedMap);

console.log(finalData);
方法二:用Array.reduce简化代码

如果想让代码更简洁,可以把两个数组合并后,用reduce一步完成合并逻辑:

// 合并两个数据源,然后用reduce遍历处理
const finalData = [...firstData, ...secondData].reduce((acc, currentItem) => {
  // 在累加器中查找是否已有相同title的分组
  const existingGroup = acc.find(group => group.title === currentItem.title);
  
  if (existingGroup) {
    // 存在则合并data数组
    existingGroup.data = [...existingGroup.data, ...currentItem.data];
  } else {
    // 不存在则新增分组(复制对象避免引用问题)
    acc.push({...currentItem});
  }
  
  return acc;
}, []);

console.log(finalData);

注意事项

  • 我在代码里用了{...item}和[...arr]这种扩展运算符,目的是创建新的对象/数组,避免修改原数据导致的意外副作用。如果你的业务场景允许修改原数据,也可以直接操作,但一般推荐保持原数据的纯净性。
  • 这两种方法都能保证最终数组里的title是唯一的,且相同title下的data会被完整合并。

内容的提问来源于stack exchange,提问作者user11583965

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:57:42