javascript - 删除所有重复出现的 JSON 对象数组
问题描述
originaData = [
{id: 1, description: abc },
{id: 2, description: def }
{id: 1, description: ghi }
{id: 3, description: jkl }
{id: 2, description: mno }
{id: 4, description: pqr }
]
expected result
uniqueData = [
{id: 3, description: jkl },
{id: 4, description: pqr }
]
duplicateData = [
{id: 1, description: abc },
{id: 2, description: def },
{id: 1, description: ghi },
{id: 2, description: mno }
]
我已经尝试过 lodash 的 uniqBy。但它并没有给我预期的结果,因为它没有删除所有重复的事件。
解决方案
您可以id
按数组的长度对分组数据进行分组和排序。
var data = [{ id: 1, description: 'abc' }, { id: 2, description: 'def' }, { id: 1, description: 'ghi' }, { id: 3, description: 'jkl' }, { id: 2, description: 'mno' }, { id: 4, description: 'pqr' }],
[duplicate, unique] = Object
.values(data.reduce((r, o) => ((r[o.id] = r[o.id] || []).push(o), r), {}))
.reduce((r, a) => (r[+(a.length === 1)].push(...a), r), [[], []]);
console.log(unique);
console.log(duplicate);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- php - Remove /?home/ from URL (Remove Controller Name from URL And Leave Only Method) | 代码点火器
- amazon-web-services - 描述成员 AWS 账户的 SCP 而不假设 AWS 管理账户
- r - 我想要使用 R 的最大样本的频率值
- java - sun.security.pkcs.ParsingException:ContentInfo 的长度无效
- twitter-bootstrap - 具有数据属性而不是 id 的数据目标
- android-management-api - 如何使用 Android Management API 请求托管 Play 商店集合中包含的应用程序列表
- nginx - nginx 响应时间过长
- postgresql - 尝试在本地 kubernetes 集群上启动 Postgres 时出错
- flutter - 错误:Flutter Hive 中的“类型‘UnspecifiedInvalidResult’不是类型转换中‘LibraryElementResult’类型的子类型”
- php - “致命错误:未捕获的 UnhandledMatchError:未处理的字符串类型的匹配值”