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

如何高效返回仅含重复项的数组?(基于指定属性判断)

如何依据指定属性快速找出数组中的重复项?

当然有简便的实现方法啦!给你分享两种实用又简洁的JavaScript方案,完美匹配你的需求——只靠name和description判断重复,返回每个重复组的首个出现项:

方法一:用Map追踪首次出现的重复项

核心思路是用Map存储每个name+description组合第一次出现的元素,遍历数组时发现重复就把首次元素加入结果(确保只加一次):

const array = [
  { name: 'name1', description:'desc1', place:'place1' },
  { name: 'name1', description:'desc1', place:'place2' },
  { name: 'name3', description:'desc3', place:'place3' },
  { name: 'name4', description:'desc4', place:'place4' },
  { name: 'name4', description:'desc4', place:'place4' },
  { name: 'name5', description:'desc5', place:'place5' }
];

// 生成唯一标识:把name和description组合成键
const getUniqueKey = item => `${item.name}|${item.description}`;

const seenItems = new Map();
const duplicates = [];

array.forEach(item => {
  const key = getUniqueKey(item);
  if (seenItems.has(key)) {
    // 只在第一次发现重复时,把首次出现的项加入结果
    if (!duplicates.some(dup => getUniqueKey(dup) === key)) {
      duplicates.push(seenItems.get(key));
    }
  } else {
    // 首次遇到该组合,存入Map
    seenItems.set(key, item);
  }
});

console.log(duplicates);
// 输出结果完全符合你的预期

方法二:用reduce统计次数后筛选

这个方法更简洁,先通过reduce统计每个组合的出现次数并记录首次元素,再直接筛选出重复项:

const array = [/* 你的原数组 */];

const getUniqueKey = item => `${item.name}|${item.description}`;

// 统计每个组合的出现次数和首次出现的元素
const countTracker = array.reduce((acc, item) => {
  const key = getUniqueKey(item);
  if (!acc[key]) {
    acc[key] = { count: 0, firstOccurrence: item };
  }
  acc[key].count++;
  return acc;
}, {});

// 筛选出出现次数>1的组合,取其首次元素
const duplicates = Object.values(countTracker)
  .filter(tracker => tracker.count > 1)
  .map(tracker => tracker.firstOccurrence);

console.log(duplicates);

小细节优化:避免键冲突

如果你的name或description里可能包含|符号,会导致键生成冲突,建议换用更安全的键生成方式:

const getUniqueKey = item => JSON.stringify([item.name, item.description]);

用JSON序列化数组的方式生成键,能彻底避免分隔符冲突的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:44:59