Group Array with count

前端 未结 3 480
醉酒成梦
醉酒成梦 2021-01-15 08:19

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

相关标签:
3条回答
  • 2021-01-15 08:58

    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>');

    0 讨论(0)
  • 2021-01-15 09:03

    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;
      }, {});
    
    0 讨论(0)
  • 2021-01-15 09:04

    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();
    
    0 讨论(0)
提交回复
热议问题