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

JavaScript如何实现二维数组去重 保留唯一元素组合

JavaScript 二维二元组数组去重实现

核心判定规则:当子数组的两个元素(用户名、编程语言)完全一致时判定为重复项,仅保留首次出现的条目,同一用户对应不同编程语言的条目不受影响。


方法1:Set 序列化实现(代码最简洁)

利用Set自动去重基础类型的特性,将二元组转为特殊字符分隔的字符串做去重依据,最后再还原为二维数组,适合绝大多数常规场景。

const result = [["user1", "java"], ["user2", "python"],["user1", "java"], ["user1", "C++"], ["user1", "java"], ["user2", "Python"]]

const uniqueResult = Array.from(
  // 选业务场景下不可能出现在用户名、语言名里的分隔符,比如|、@@@,避免字符串碰撞
  new Set(result.map(item => item.join('|')))
).map(str => str.split('|'))

// 输出结果:[["user1", "java"], ["user2", "python"], ["user1", "C++"], ["user2", "Python"]]

注意:如果业务字段可能包含你选的分隔符,不要用这个方法,避免错误去重。


方法2:Map 标记实现(最稳妥,无碰撞风险)

遍历数组时用Map存储已经出现过的用户+语言组合,未标记过的条目才放入结果集,不存在序列化碰撞问题,还可以灵活扩展去重规则(比如大小写不敏感)。

const result = [["user1", "java"], ["user2", "python"],["user1", "java"], ["user1", "C++"], ["user1", "java"], ["user2", "Python"]]
const existed = new Map()
const uniqueResult = []

for (const [user, lang] of result) {
  // 组合唯一键,如需大小写不敏感去重,可改为 `${user.toLowerCase()}__${lang.toLowerCase()}`
  const uniqueKey = `${user}__${lang}`
  if (!existed.has(uniqueKey)) {
    existed.set(uniqueKey, true)
    uniqueResult.push([user, lang])
  }
}

方法3:filter + findIndex 实现(兼容老旧JS环境)

不需要依赖ES6的Map/Set特性,通过查找条目首次出现的索引判断是否为重复项,仅适合数据量小、需要兼容极低版本JS运行环境的场景,数据量过万时性能较差。

const result = [["user1", "java"], ["user2", "python"],["user1", "java"], ["user1", "C++"], ["user1", "java"], ["user2", "Python"]]

const uniqueResult = result.filter((item, currentIndex) => {
  const firstAppearIndex = result.findIndex(
    target => target[0] === item[0] && target[1] === item[1]
  )
  return firstAppearIndex === currentIndex
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:12:17