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

从含数百对象的数组中提取去重后的responsable对象数组

提取并去重数组中的responsable子对象

没问题,这个需求非常常见,咱们分两步就能轻松搞定——先把所有responsable子对象提取出来,再基于唯一标识完成去重操作。下面是具体的实现方案:

核心实现代码

假设你的原数组名为originalArray,我们可以用JavaScript的数组方法链式调用完成操作:

// 提取并去重,以id作为唯一标识
const uniqueResponsables = Object.values(
  originalArray
    // 第一步:提取所有responsable子对象
    .map(item => item.responsable)
    // 可选:过滤掉可能存在的null/undefined的responsable
    .filter(Boolean)
    // 第二步:用reduce合并相同id的对象,保留最后一个出现的
    .reduce((accumulator, current) => {
      accumulator[current.id] = current;
      return accumulator;
    }, {})
);

代码细节解释

  1. map提取子对象:遍历原数组,把每个元素里的responsable子对象单独拎出来,得到一个只包含responsable的数组。
  2. filter(Boolean)(可选):如果原数组里存在某些元素的responsable是null或undefined,这一步能把这些无效项过滤掉,避免后续操作出错。
  3. reduce实现去重:通过将数组转换为以id为键的对象,利用对象键的唯一性自动去重——相同id的对象会被后面的覆盖(如果原数组里有重复项)。最后用Object.values()把对象的值转换回数组,就得到了去重后的结果。

自定义去重依据

如果你的去重标识不是id,而是其他字段(比如username,或者nombre+apellido1的组合),只需要修改reduce里的键即可:

// 示例:以username作为去重标识
const uniqueResponsables = Object.values(
  originalArray
    .map(item => item.responsable)
    .filter(Boolean)
    .reduce((acc, curr) => {
      acc[curr.username] = curr;
      return acc;
    }, {})
);

// 示例:以nombre+apellido1+apellido2组合作为去重标识
const uniqueResponsables = Object.values(
  originalArray
    .map(item => item.responsable)
    .filter(Boolean)
    .reduce((acc, curr) => {
      const key = `${curr.nombre}-${curr.apellido1}-${curr.apellido2}`;
      acc[key] = curr;
      return acc;
    }, {})
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:37:09