Home > other >  How to return an array of unique objects based on the id of the object in es6?
How to return an array of unique objects based on the id of the object in es6?

Time:12-27

    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)]

CodePudding user response:

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()];

CodePudding user response:

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}

  • Related