Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get an array without duplicates from object elements

I have an object with groups (as an example). Each group object contains one header id and multiple trigger ids. I want to get an array of all the triggers of all groups without duplicates.

An example would be this:

const groups = {
  group1: { header: 9, trigger: [10,11] },
  group2: { header: 15, trigger: [11, 17] }
}

Currently, I am doing it like so:

const triggers = Array.from(groups, x => x.trigger);

This gives me the following result: [[10,11],[11,17]]

My plan is to get something like this: [10,11,17]. They don't have to be sorted but the duplicates (in this case 11) has to be removed. Is there any fast way of doing it? Otherwise I would loop through this array now and then concat to a new array but I think there is a faster and better solution.

like image 729
2 revs Avatar asked Jul 26 '26 20:07

2 revs


2 Answers

Here is a one-liner using Set and .flatMap() method

const groups = {
  group1: { header: 9, trigger: [10,11] },
  group2: { header: 15, trigger: [11, 17] }
}
const triggers = [...new Set(Object.values(groups).flatMap(x=>x.trigger))]

console.log(triggers)
like image 106
palaѕн Avatar answered Jul 28 '26 12:07

palaѕн


Here's a pretty quick way using a Set

const groups = {
  group1: { header: 9, trigger: [10,11] },
  group2: { header: 15, trigger: [11, 17] }
}

const addGroupTrigger = (triggersSet, [, group]) => {
  for (const trigger of group.trigger) {
    triggersSet.add(trigger)
  }
  return triggersSet
}

console.log(
  Array.from(Object.entries(groups).reduce(addGroupTrigger, new Set()))
)
like image 41
richytong Avatar answered Jul 28 '26 11:07

richytong



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!