javascript - 获取对象数组中重复对象的列表
问题描述
我正在尝试在对象数组中获取重复的对象。假设对象如下所示。
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' }
];
解决方案
您可以使用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]));
推荐阅读
- ocaml - 如何在 .mli 文件中包含模块?
- java - 查找任何给定单词的两个“字母”中所有可能的字母组合
- c# - 给定一个存储 List 的自定义泛型类
如何防止将 T 类型的对象多次添加到列表中 ? - c - 在哪些系统/平台上支持“%b”作为格式说明符?
- python - 将 IPython HTML 保存为 PNG
- java - 如何从具有重复参数的mongodb获取数据?
- google-apps-script - 更改所有选项卡颜色 Google 脚本
- antlr - 如何在监听器中实现类型检查
- r - R ggplot问题与多线图
- c# - 如何在不使用上传按钮的情况下预览选择的文件的选择文件上传按钮