过滤掉唯一的对象并返回整个对象



我有这样的结构,重复的结果:

result: { 
{id: "6766", name: "Bob", tickets: 95, lastWon: "2019-08-23T00:00:00", departmentId: "28"}
{id: "3334", name: "Anne", tickets: 177, lastWon: "2019-06-21T00:00:00", departmentId: "28"}
{id: "3019", name: "Carl", tickets: 221, lastWon: "2019-05-24T00:00:00", departmentId: "28"}
{id: "6766", name: "Bob", tickets: 95, lastWon: "2019-08-23T00:00:00", departmentId: "28"}
{id: "3334", name: "Anne", tickets: 177, lastWon: "2019-06-21T00:00:00", departmentId: "28"}
{id: "3019", name: "Carl", tickets: 221, lastWon: "2019-05-24T00:00:00", departmentId: "28"}
}

我如何使用React过滤掉重复的,所以它只输出:

result: { 
{id: "6766", name: "Bob", tickets: 95, lastWon: "2019-08-23T00:00:00", departmentId: "28"}
{id: "3334", name: "Anne", tickets: 177, lastWon: "2019-06-21T00:00:00", departmentId: "28"}
{id: "3019", name: "Carl", tickets: 221, lastWon: "2019-05-24T00:00:00", departmentId: "28"}
}

Using filter…

data.filter((item, index) => data.indexOf(item) === index);

此操作有效,因为indexOf将返回元素存在的第一个实例,因此任何重复项都不会通过筛选条件。

我们知道Set对象是有用的,以保持唯一的项目,但我们可能有几个字段在对象和Set不能过滤唯一的对象数组。

我们可以使用JSON.stringify来填充对象的纯文本,并将其放在Set中,然后它是唯一的。:)

下面的代码片段。

let uniqueReferrals = new Set();
referrals.forEach((el) => {
uniqueReferrals.add(JSON.stringify(el));
});
uniqueReferrals = Array.from(uniqueReferrals);
uniqueReferrals = uniqueReferrals.map((el) => {
return JSON.parse(el);
});

如果它是一个数组,我通常喜欢将其转换为map/object以确保唯一性(而不是使用Set或其他)。你可以这样做:

result.reduce((map, val)=>{
return {
...map,
[val.id] : val
}
}, {})

最新更新