2
    Array(96) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, … ]
​
0: Object { id: 1, name: "PrimShal01", period: 3, … }
1: Object { id: 61, name: "TertDeep01", period: 1, … }
2: Object { id: 37, name: "SecoDeep01", period: 2, … }
3: Object { id: 49, name: "TertShal01", period: 1, … } ​
4: Object { id: 13, name: "PrimDeep01", period: 3, … }
5: Object { id: 61, name: "TertDeep01", period: 1, … }

When I try the following code I only get the unique id, but I want the objects:

const uniques = [new Set(all_filter_ids.map(pos => pos.id))]

When I try the following code I get the the same as before:

const uniques = [new Set(all_filter_ids)]

3 Answers3

5

Turn them into a Map indexed by ID (only one object can exist for a key), then turn the Map's values back into the array.

const map = new Map(all_filter_ids.map(pos => [pos.id, pos]));
const uniques = [...map.values()];
CertainPerformance
  • 313,535
  • 40
  • 245
  • 254
  • This will keep the last element by id. If you want the first one, you can add the items in reverse order into the Map `new Map(all_filter_ids.map(...).reverse())` and if order matters, `[...map.values()].reverse()` to get them back in the original order out. – Thomas Dec 27 '21 at 02:14
  • same as my answer on here... https://stackoverflow.com/questions/70485284/how-to-remove-duplicate-elements-from-an-array-of-objects-js/70485379#70485379 – skara9 Dec 27 '21 at 02:36
1

Another one solution:

const arr = [{ id: 1, name: "PrimShal01", period: 3},{ id: 61, name: "TertDeep01", period: 1},{ id: 37, name: "SecoDeep01", period: 2},{ id: 49, name: "TertShal01", period: 1},{ id: 13, name: "PrimDeep01", period: 3},{ id: 61, name: "TertDeep01", period: 1}]

const result = Object.values(
    arr.reduce((acc, obj) => ({ ...acc, [obj.id]: obj }), {})
);

console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}
A1exandr Belan
  • 3,117
  • 3
  • 22
  • 44
0

Maintain a set for tracking id's and use filter

const uniq = (arr, track = new Set()) =>
  arr.filter(({ id }) => (track.has(id) ? false : track.add(id)));

const arr = [
  { id: 1, name: "PrimShal01", period: 3 },
  { id: 61, name: "TertDeep01", period: 1 },
  { id: 37, name: "SecoDeep01", period: 2 },
  { id: 49, name: "TertShal01", period: 1 },
  { id: 13, name: "PrimDeep01", period: 3 },
  { id: 61, name: "TertDeep01", period: 1 },
];

console.log(uniq(arr))
Siva K V
  • 9,737
  • 2
  • 13
  • 29