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.
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.
3 Answers
Reset to default 8Here 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)
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()))
)
Using the function Array.from
as in your code, I can't make it work like you said.
Btw, I have this snippet, take a look to see if it helps:
const groups = {
group1: { header: 9, trigger: [10,11] },
group2: { header: 15, trigger: [11, 17] }
}
var arr = []
Object.keys(groups).forEach(function (key) {
arr = arr.concat(groups[key].trigger);
});
console.log('Array with DUP: ', arr);
var set = new Set(arr);
arr = Array.from(set);
console.log('Array without DUP: ', arr);
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745572382a4633757.html
评论列表(0条)