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

JavaScript判断对象数组是否存在姓名和年龄都相同的重复元素及代码修复

问题原因

你的代码存在两个核心逻辑错误:

  1. 把所有重名条目的年龄放在统一数组里查重,会出现「不同姓名但年龄相同」的误判
  2. 最终判断是否报错的条件仍然用的是重名数组的长度,完全没用到年龄查重的结果,所以只要有重名就会输出error

修正后代码

const data = [
  {id: 1,name: "Liam",age: 20},
  {id: 2,name: "Liam",age: 18},
  {id: 3,name: "Noah",age: 20},
  {id: 4,name: "Noah",age: 18},
  {id: 5,name: "Elijah",age: 18}
]

function checked() {
  // 按姓名分组,存储每个姓名对应的所有年龄
  const nameAgeMap = {}
  let hasDuplicate = false

  for (const item of data) {
    if (!nameAgeMap[item.name]) {
      nameAgeMap[item.name] = []
    }
    // 检查当前姓名下是否已经有相同年龄
    if (nameAgeMap[item.name].includes(item.age)) {
      hasDuplicate = true
      break
    }
    nameAgeMap[item.name].push(item.age)
  }

  console.log(hasDuplicate ? 'error' : 'save')
}

checked()

逻辑说明

  • 遍历数组时按照姓名分组,每个姓名对应一个存储年龄的数组
  • 每遍历一个条目,先检查对应姓名的年龄数组里是否已经存在当前年龄:存在则直接标记有重复,终止遍历
  • 最终根据是否存在「姓名+年龄都重复」的条目输出对应结果

你提供的测试数据中所有重名条目年龄都不重复,运行代码会输出save。如果新增一条{id:6,name:"Liam",age:20}的条目,运行就会输出error。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:15:03