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

JavaScript如何比较数组中近似相似字符串并按规则去重

JavaScript按任务维度数组去重实现方案

核心判断逻辑:你的去重规则是同任务仅保留第一条出现的记录,不需要做模糊的字符串相似度匹配,两种数据格式都可以通过「记录已出现的任务名,过滤重复任务条目」的方式实现,时间复杂度O(n),性能最优。


针对字符串格式数组(示例1)

字符串的格式固定为任务名 - 成员名,分隔符-是明确的拆分标识:

let arrayA = ["task A - memberA", "task A - memberB", "task B - memberA"]
// 用Set存储已经出现过的任务名,查询效率O(1)
const existedTasks = new Set()

arrayA = arrayA.filter(item => {
  // 拆分字符串拿到任务名,如果分隔符两边空格不固定,可以用正则 /\s*-\s*/ 匹配拆分
  const taskName = item.split(' - ')[0]
  if (existedTasks.has(taskName)) return false
  existedTasks.add(taskName)
  return true
})

// 运行结果:["task A - memberA", "task B - memberA"],和预期一致

针对对象格式数组(示例2)

对象结构直接内置了task字段,不需要做字符串拆分,逻辑更简单:

let arrayA = [
  {task: "Task A", member: "MemberA"},
  {task: "Task A", member: "MemberB"},
  {task: "Task B", member: "MemberB"}
]
const existedTasks = new Set()

arrayA = arrayA.filter(item => {
  const taskName = item.task
  if (existedTasks.has(taskName)) return false
  existedTasks.add(taskName)
  return true
})

/* 运行结果:
[
  {task: "Task A", member: "MemberA"},
  {task: "Task B", member: "MemberB"}
]
和预期一致
*/

扩展说明

如果后续遇到无明确分隔符、存在拼写差异的近似字符串匹配场景(比如"taskA"和"task A"需要判定为同任务),可以引入莱文斯坦距离(编辑距离)算法计算字符串相似度,设置合理阈值判定是否为同一任务。但你当前给出的场景规则明确,上述方案是最简、性能最好的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:39:19