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

如何从对象数组中筛选出name与age均相同的重复元素

解决数组中筛选name和age均相同元素的问题

给定数组:

data= [
  { "id": 0, "name": "name1", "age": 12, "city": "cityA" },
  { "id": 1, "name": "name2", "age": 7, "city": "cityC" },
  { "id": 2, "name": "name3", "age": 23, "city": "cityB" },
  { "id": 2, "name": "name1", "age": 12, "city": "cityA" }
];

需求是提取出所有name和age属性完全相同的元素。你之前写的代码会返回全部元素,问题出在逻辑判断上——你用some遍历数组时,内部循环匹配元素时没排除自身,而且只要找到匹配就直接push,导致每个元素都能匹配到自己,最终所有元素都被加入结果数组。

下面给两种可行的实现方案:

方案一:哈希表统计(高效,适合大数据量)

先统计每个name+age组合的出现次数,再筛选出次数大于1的元素:

const data = [
  { "id": 0, "name": "name1", "age": 12, "city": "cityA" },
  { "id": 1, "name": "name2", "age": 7, "city": "cityC" },
  { "id": 2, "name": "name3", "age": 23, "city": "cityB" },
  { "id": 2, "name": "name1", "age": 12, "city": "cityA" }
];

// 统计每个name+age组合的出现次数
const countMap = {};
data.forEach(item => {
  const key = `${item.name}-${item.age}`;
  countMap[key] = (countMap[key] || 0) + 1;
});

// 筛选出重复出现的元素
const result = data.filter(item => {
  const key = `${item.name}-${item.age}`;
  return countMap[key] > 1;
});

console.log(result);

执行后输出的结果就是所有name和age都相同的元素:

[
  { id: 0, name: 'name1', age: 12, city: 'cityA' },
  { id: 2, name: 'name1', age: 12, city: 'cityA' }
]

方案二:嵌套循环对比(适合小数据量)

通过嵌套循环对比元素,排除自身后找到匹配项:

const data = [
  { "id": 0, "name": "name1", "age": 12, "city": "cityA" },
  { "id": 1, "name": "name2", "age": 7, "city": "cityC" },
  { "id": 2, "name": "name3", "age": 23, "city": "cityB" },
  { "id": 2, "name": "name1", "age": 12, "city": "cityA" }
];

const result = new Set();

// 嵌套循环对比,排除自身索引
data.forEach((item, idx) => {
  data.forEach((otherItem, otherIdx) => {
    if (idx !== otherIdx && item.name === otherItem.name && item.age === otherItem.age) {
      result.add(item);
      result.add(otherItem);
    }
  });
});

// 把Set转成数组
const finalResult = Array.from(result);
console.log(finalResult);

原代码问题分析

你之前的代码里,data.some()会遍历每个元素,内部循环form(假设form就是data)时,每个元素都会匹配到自身,导致所有元素都被push到arr里。要修复的话,需要在匹配时排除当前元素的索引,并且避免重复添加相同元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:30:39