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

如何合并含额外属性的两个对象并更新记录总数

合并包含统计属性的JavaScript对象

我需要合并两个结构相似的JavaScript对象,每个对象都包含items数组以及count、total_records、offset、has_more这些额外属性。尝试过直接用concat处理items数组,但没法同步更新统计属性。期望合并后的对象不仅拼接items数组,还要把count和total_records更新为合并后items的总数量,同时保留其他属性(比如示例中offset保持500,has_more保持false)。

示例输入:

const obj1 = {
  items: [
    { content_sys_id: "15b9d20b87941d10f2d740c8dabb35f1" },
    { content_sys_id: "009e86a787dc5d10f2d740c8dabb35c8" },
    { content_sys_id: "21f5b2d597a151d0da8bd714a253af44" },
  ],
  count: 3,
  total_records: "3",
  offset: 500,
  has_more: false,
};
const obj2 = {
  items: [
    { content_sys_id: "002301478788d15038a740c8dabb350e" },
    { content_sys_id: "cb895ec787941d10f2d740c8dabb357e" },
  ],
  count: 2,
  total_records: "2",
  offset: 500,
  has_more: false,
};

期望输出:

{
  items: [
    { content_sys_id: "15b9d20b87941d10f2d740c8dabb35f1" },
    { content_sys_id: "009e86a787dc5d10f2d740c8dabb35c8" },
    { content_sys_id: "21f5b2d597a151d0da8bd714a253af44" },
    { content_sys_id: "002301478788d15038a740c8dabb350e" },
    { content_sys_id: "cb895ec787941d10f2d740c8dabb357e" },
  ],
  count: 5,
  total_records: "5",
  offset: 500,
  has_more: false,
}

实现方案

可以通过创建新对象,手动拼接items数组并计算更新统计属性,同时复制需要保留的其他属性。以下是具体实现:

合并两个对象的函数

function mergeResultObjects(objA, objB) {
  // 拼接items数组,避免修改原数组
  const mergedItems = [...objA.items, ...objB.items];
  // 计算合并后的总记录数
  const totalCount = mergedItems.length;
  
  // 返回合并后的对象,可按需调整属性取值逻辑
  return {
    items: mergedItems,
    count: totalCount,
    total_records: String(totalCount), // 转成字符串匹配原数据格式
    offset: objA.offset, // 若两个对象offset不同,可改为取最大值/最小值或其他规则
    has_more: objA.has_more && objB.has_more // 若只要有一个has_more为true就保留true,可改为||
  };
}

// 使用示例
const mergedObj = mergeResultObjects(obj1, obj2);
console.log(mergedObj);

支持合并多个对象的扩展函数

如果需要合并两个以上的同结构对象,可以使用以下函数:

function mergeMultipleResultObjects(...objects) {
  // 扁平化所有对象的items数组
  const mergedItems = objects.flatMap(obj => obj.items);
  const totalCount = mergedItems.length;
  
  // 以第一个对象的属性为基准,按需调整
  const baseObj = objects[0];
  return {
    items: mergedItems,
    count: totalCount,
    total_records: String(totalCount),
    offset: baseObj.offset,
    has_more: objects.some(obj => obj.has_more) // 只要有一个对象has_more为true,结果就为true
  };
}

// 使用示例
const mergedObj = mergeMultipleResultObjects(obj1, obj2);

关键说明

  • items数组拼接:使用扩展运算符[...arr1, ...arr2]或flatMap,既简洁又不会修改原数组。
  • 统计属性更新:直接用合并后items的长度作为新的count,并转换为字符串匹配total_records的原格式。
  • 其他属性处理:offset和has_more的取值逻辑可根据业务需求调整,比如offset取最大值,has_more只要存在true就保留true等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:35:20