我有这样的结构,重复的结果:
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
}
}, {})