Categories
JavaScript Answers

How to Get Distinct Values From an Array of Objects in JavaScript?

Spread the love

Using Array.prototype.map, Sets, and the Spread Operator

One way to get distinct values from an array of JavaScript objects is to use the array’s map method to get an array with the values of a property in each object.

Then we can remove the duplicate values with the Set constructor.

And then we can convert the set back to an array with the spread operator.

For instance, we can write:

const array = [{
    "name": "Joe",
    "age": 17
  },
  {
    "name": "Bob",
    "age": 17
  },
  {
    "name": "Carl",
    "age": 35
  }
]
const unique = [...new Set(array.map(item => item.age))];
console.log(unique)

We have the array array that has objects with the name and age properties.

And we want to get all the distinct values of the age property.

To do this, we call array.map with a callback that returns the age property value from each object and put them in the array.

Then we pass the returned array into the Set constructor.

And then we convert the set back to an array with the spread operator.

Therefore, unique is [17, 35] .

Using Array.prototype.map, Sets, and the Array.from

We can replace the spread operator with the Array.from method for converting the set to an array

For instance, we can write:

const array = [{
    "name": "Joe",
    "age": 17
  },
  {
    "name": "Bob",
    "age": 17
  },
  {
    "name": "Carl",
    "age": 35
  }
]
const unique = Array.from(new Set(array.map(item => item.age)));
console.log(unique)

to call Array.from with the set as the argument instead of the spread operator.

And we get the same result as before.

Using Array.prototype.map and Array.prototype.filter

Instead of using the Set constructor and the spread operator, we can also use the filter method to get the distinct values

For instance, we can write:

const array = [{
    "name": "Joe",
    "age": 17
  },
  {
    "name": "Bob",
    "age": 17
  },
  {
    "name": "Carl",
    "age": 35
  }
]
const unique = array
  .map(item => item.age)
  .filter((value, index, self) => self.indexOf(value) === index)

console.log(unique)

We call the filter method with a callback that has the value , index , and self parameters.

value has the value of the array returned from map .

index has the index of the element of the array returned from map that’s being iterated through.

And self is the array that’s returned by map .

And we return all the items that are the first instance of a given value with the indexOf method.

indexOf method returns the index of the first element of a value.

So we can use that to check against the index to only return the first item of each instance of each value.

And we get the same result as before.

By John Au-Yeung

Web developer specializing in React, Vue, and front end development.

Leave a Reply

Your email address will not be published. Required fields are marked *