javascript - Få liste over dupliserte objekter i en matrise av objekter
Jeg prøver å finne dupliserte objekter i et array av objekter. La oss si at objektet er som nedenfor.
values = [
{ id: 10, name: 'someName1' },
{ id: 10, name: 'someName2' },
{ id: 11, name: 'someName3' },
{ id: 12, name: 'someName4' }
];
Dupliserte objekter bør returneres som nedenfor:
duplicate = [
{ id: 10, name: 'someName1' },
{ id: 10, name: 'someName2' }
];
Svar #1
Du kan bruke Array#reduce for å lage en telleoppslagstabell basert på id-nøkkelen, og deretter bruke Array#filter for å fjerne alle elementer som kun dukket opp én gang i oppslagstabellen. Tidskompleksiteten er 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]));Du kan forenkle dette hvis nettleseren din støtter Object.groupBy:
const values = [{id: 10, name: 'someName1'}, {id: 10, name: 'someName2'}, {id: 11, name:'someName3'}, {id: 12, name: 'someName4'}];
const lookup = Object.groupBy(values, e => e.id);
console.log(values.filter(e => lookup[e.id].length > 1));Svar #2
La oss si at du har:
arr = [
{ id:10, name: 'someName1' },
{ id:10, name: 'someName2' },
{ id:11, name: 'someName3' },
{ id:12, name: 'someName4' }
]
Så, for å få unike gjenstander:
unique = arr
.map(e => e['id'])
.map((e, i, final) => final.indexOf(e) === i && i)
.filter(obj=> arr[obj])
.map(e => arr[e]);
Da vil resultatet være
unique = [
{ id:10, name: 'someName1' },
{ id:11, name: 'someName3' },
{ id:12, name: 'someName4' }
]
Og, for å få dupliserte id-er:
duplicateIds = arr
.map(e => e['id'])
.map((e, i, final) => final.indexOf(e) !== i && i)
.filter(obj=> arr[obj])
.map(e => arr[e]["id"])
Liste over ID-er vil være
duplicateIds = [10]
Så, for å få dupliserte objekter:
duplicate = arr.filter(obj=> dublicateIds.includes(obj.id));
Nå har du det:
duplicate = [
{ id:10, name: 'someName1' },
{ id:10, name: 'someName2' }
]
Takk https://reactgo.com/removeduplicateobjects/
