I have an array of items that contains several properties. One of the properties is an array of tags. What is the best way of getting all the tags used in those items and or
You can do this simply using a reduce operation. For example
var items = [{
itemName: 'item1',
tags: [
{id: 'tag1', name: 'Tag 1'},
{id: 'tag2', name: 'Tag 2'}
]
}, {
itemName: 'item2',
tags: [
{id: 'tag1', name: 'Tag 1'},
{id: 'tag3', name: 'Tag 3'}
]
}];
var tags = items.reduce((tags, item) => {
item.tags.forEach(tag => {
tags[tag.id] = tags[tag.id] || 0;
tags[tag.id]++;
});
return tags;
}, {});
document.write('<pre>' + JSON.stringify(tags, null, ' ') + '</pre>');
You may try this too:
var tagGroup =
items.reduce(function(p, c){
c.tags.map(function(tag){
p[tag] = p[tag] || {count:0};
p[tag].count++;
return p;
});
return p;
}, {});
Map all tag arrays into a single array, and then countBy
var tags = _.flatten(_.map(items,d=>d.tags))
tags = _.countBy(tags)
Using underscores chain
utility
var tags = _.chain(items).map(d=>d.tags).flatten().countBy().value();