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

JavaScript如何从对象数组中筛选出name属性重复的所有对象

问题分析与修复方案

你的代码存在两处核心错误导致最终filters为空:

  • 属性名大小写不匹配:你定义的对象属性是小写name,但过滤时写的是大写开头的x.Name,JavaScript的对象属性名大小写敏感,永远匹配不到对应值。
  • 匹配逻辑错误:resultName是存储重复名称的数组,不能直接用===判断单个字符串和数组是否相等,需要调用数组的includes()方法判断当前对象的name是否在重复名单内。

另外你当前的toFindDuplicates方法如果遇到同一名称重复3次及以上的情况,会在resultName里生成重复的名称条目,建议优化为返回去重后的重复名称集合,避免不必要的性能损耗。

修复后完整代码

const data = [
     {id: 1,name: "Liam",age: 20},
     {id: 1,name: "Noah",age: 22},
     {id: 1,name: "Liam",age: 20},
     {id: 1,name: "Elijah",age: 18},
     {id: 1,name: "Elijah",age: 18}
]
// 提取所有name
const searchName = data.map(item => item.name)
console.log(searchName);
// 优化后的找重复值方法,返回去重后的重复名称
const toFindDuplicates = arry => Array.from(new Set(arry.filter((item, index) => arry.indexOf(item) !== index)));
const resultName = toFindDuplicates(searchName)
console.log(resultName);
// 修复属性名和匹配逻辑
const filters = data.filter(x => resultName.includes(x.name))
console.log(filters);

输出结果

运行后filters会正确返回所有name重复的对象:

[
  { id: 1, name: 'Liam', age: 20 },
  { id: 1, name: 'Liam', age: 20 },
  { id: 1, name: 'Elijah', age: 18 },
  { id: 1, name: 'Elijah', age: 18 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:27:02