Get unique objects from an array by key
Keep one record per key value, the last one seen.
function uniqueBy({ objects, key }) { return [...new Map(objects.map(item => [item[key], item])).values()]; }
Input & expected output
Input
{
"objects": [
{
"recipient": "[email protected]",
"status": "deferred"
},
{
"recipient": "[email protected]",
"status": "delivered"
},
{
"recipient": "[email protected]",
"status": "delivered"
}
],
"key": "recipient"
}Expected output
[
{
"recipient": "[email protected]",
"status": "delivered"
},
{
"recipient": "[email protected]",
"status": "delivered"
}
]The edge case
Input
{
"objects": [],
"key": "id"
}Expected output
[]Know the limits
- The last record per key wins, in the position of the first one — handy for keeping the latest state per recipient.
The function above is the implementation used by the lab. The lab validates JSON types and caps size before execution; include equivalent validation when accepting untrusted input in your application.
Source & maintenance
Based on Returns an object with unique values by key from the original 1loc collection by Nguyen Huu Phuoc, with gpbuavv. Copyright (c) 2020 phuoc-ng. MIT licensed.
Curated implementation; explicit input contract, edge case and limits. Original MDX retained as inert source evidence.
Maintained by Oveyon. Source commit: 14b481cf60df. Read the license.
Keep exploring
- Pick properties from an object — Build a new object with only the requested own properties.
- Omit properties from an object — Keep the own enumerable fields that are not in a supplied list.
- Create an object from pairs of key and value — Turn [key, value] pairs into a plain object with Object.fromEntries.