首页 > 解决方案 > 删除所有重复出现的 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。但它并没有给我预期的结果,因为它没有删除所有重复的事件。

标签: javascriptarraystypescriptobject

解决方案


您可以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; }


推荐阅读