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

如何移除包含多数组的对象中的重复dsUserId?

解决根据dsUserId去重数组的问题

嘿,我来帮你搞定这个去重需求!你需要在把connections数组存入state之前,先根据dsUserId字段过滤掉重复项,这样渲染下拉框的时候就不会出现重复的选项了。下面是具体的实现方法:

方法一:保留第一个出现的重复项(推荐)

用filter结合Set来追踪已经出现过的dsUserId,只保留第一次出现的元素:

// 先对connections数组做去重处理
const seenDsUserIds = new Set();
const uniqueConnections = results.data.data.connections.filter(item => {
  // 如果当前dsUserId已经存在,就过滤掉
  if (seenDsUserIds.has(item.dsUserId)) {
    return false;
  }
  // 否则记录这个id,并保留当前元素
  seenDsUserIds.add(item.dsUserId);
  return true;
});

// 更新state时使用去重后的数组
this.setState({ 
  user_connections: uniqueConnections, 
  newLeads: results2.data.data, 
  promotion: results3.data.data, 
  hasPromotion: results3.data.data.length !== 0, // 这里可以简化写法哦
  promoPlan: promoPlan, 
  toRemoveDays: excludedDays 
});
console.log("去重后的用户数据", this.state.user_connections);

方法二:保留最后出现的重复项

如果你希望保留最后一次出现的相同dsUserId的元素,可以用Map来实现,因为Map的键会被后续的同键元素覆盖:

const uniqueConnections = Array.from(
  new Map(results.data.data.connections.map(item => [item.dsUserId, item])).values()
);

// 同样把uniqueConnections传入setState即可
this.setState({ 
  user_connections: uniqueConnections,
  // 其他state字段保持不变
  newLeads: results2.data.data, 
  promotion: results3.data.data, 
  hasPromotion: results3.data.data.length !== 0,
  promoPlan: promoPlan, 
  toRemoveDays: excludedDays 
});

为什么这样做?

我们在数据存入state之前就完成去重,而不是在渲染时临时处理,这样既保证了state数据的干净,也避免了每次渲染都重复执行去重逻辑,提升了性能。

修改后,你的下拉框渲染部分不需要改动,因为this.state.user_connections已经是去重后的数组了,map出来的选项自然不会有重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:57:35