首页 > 解决方案 > 获取对象数组中重复对象的列表

问题描述

我正在尝试在对象数组中获取重复的对象。假设对象如下所示。

values = [
  { id: 10, name: 'someName1' },
  { id: 10, name: 'someName2' },
  { id: 11, name: 'someName3' },
  { id: 12, name: 'someName4' }
];

重复的对象应返回如下:

duplicate = [
  { id: 10, name: 'someName1' },
  { id: 10, name: 'someName2' }
];

标签: javascriptarraystypescriptecmascript-6lodash

解决方案


您可以使用Array#reduce根据id键创建计数器查找表,然后使用Array#filter删除查找表中仅出现一次的任何项目。时间复杂度为 O(n)。

const values = [{id: 10, name: 'someName1'}, {id: 10, name: 'someName2'}, {id: 11, name:'someName3'}, {id: 12, name: 'someName4'}];

const lookup = values.reduce((a, e) => {
  a[e.id] = ++a[e.id] || 0;
  return a;
}, {});

console.log(values.filter(e => lookup[e.id]));


推荐阅读