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

如何避免JavaScript中map函数处理后的数据重复?

问题解决步骤

先修正map代码的基础错误

你当前的map函数参数名写错了,参数定义的是serviceItems,但内部使用的是service,这会导致变量未定义。同时,你每个map元素返回的是包含单个对象的数组,这会让dataService变成数组套数组的结构,后续处理会更麻烦,建议直接返回对象:

const dataService = serviceItems.map((service) => ({
  text: 'Data of Service',
  ul: [
    `A: ${service.serviceCategoryName}
B: ${translateUserRules(service.departmentAssessment)}
C: ${servicePaymentMethod(service.paymentMethod)}
D: ${getContractName(service.contractId)}
E: ${getProjectName(service.projectId)}`
  ]
}));

错误原因分析

你写的去重代码dataService.filter(x => !x.includes(dataService))逻辑完全错误:

  • x是dataService的元素(按你原来的写法是包含对象的数组,修正后是单个对象),includes方法是用来检查数组是否包含某个元素,你把整个dataService数组传进去,类型不匹配,所以触发类型错误。
  • 这个逻辑本身也无法实现去重,因为你是在判断当前元素是否包含整个数组,这显然不符合需求。

两种去重实现方案

方案1:基于生成的文本内容去重

如果两个服务生成的ul文本完全一致就算重复,可以用Set记录已经出现过的文本内容:

const seenContent = new Set();
const filteredData = dataService.filter(item => {
  // 取出ul数组里的唯一文本内容
  const content = item.ul[0];
  if (seenContent.has(content)) {
    return false; // 已存在,过滤掉
  }
  seenContent.add(content);
  return true; // 不存在,保留
});

方案2:基于原始数据的唯一标识去重(更可靠)

如果原始service对象有唯一标识(比如contractId+projectId的组合可以唯一标识一个服务),用这个标识去重会比文本更可靠(避免文本格式细微差异导致的误判):

const seenKeys = new Set();
const filteredData = serviceItems
  .map((service) => {
    // 生成唯一标识
    const uniqueKey = `${service.contractId}-${service.projectId}`;
    return {
      text: 'Data of Service',
      ul: [
        `A: ${service.serviceCategoryName}
B: ${translateUserRules(service.departmentAssessment)}
C: ${servicePaymentMethod(service.paymentMethod)}
D: ${getContractName(service.contractId)}
E: ${getProjectName(service.projectId)}`
      ],
      uniqueKey
    };
  })
  .filter(item => {
    if (seenKeys.has(item.uniqueKey)) {
      return false;
    }
    seenKeys.add(item.uniqueKey);
    return true;
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:18:26