【问题标题】:groupBy count in lodashlodash中的groupBy计数
【发布时间】:2016-08-10 09:06:31
【问题描述】:

我有一个这样的对象数组:

[
  {
    rating: 1
  },
  {
    rating: 2
  },
  {
    rating: 3
  },
  {
    rating: 1
  }
]

我想要这样的结果 -

{
  1: 2,
  2: 1,
  3: 1
}

它将是Rating_Value: Count。

我怎样才能在 lodash 中做到这一点?或者如果它可以在没有lodash的情况下进行优化?

【问题讨论】:

    标签: javascript arrays lodash


    【解决方案1】:

    您可以使用lodash#countBy。

    var result = _.countBy(data, 'rating');
    

    var data = [
      {
        rating: 1
      },
      {
        rating: 2
      },
      {
        rating: 3
      },
      {
        rating: 1
      }
    ];
    
    var result = _.countBy(data, 'rating');
    
    console.log(result);
    <script src="https://cdn.jsdelivr.net/lodash/4.14.2/lodash.min.js"></script>

    【讨论】:

      【解决方案2】:

      您可以使用reduce() 获得此结果。

      var data = [{"rating":1},{"rating":2},{"rating":3},{"rating":1}];
      
      var result = data.reduce(function(r, e) {
        r[e.rating] = (r[e.rating] || 0) + 1;
        return r;
      }, {});
      
      console.log(result)

      【讨论】:

        【解决方案3】:

        你可以像这样在纯 JS 中做到这一点:

        var myArr = [
          {
            rating: 1
          },
          {
            rating: 2
          },
          {
            rating: 3
          },
          {
            rating: 1
          }
        ];
        
        var ratingObject = {};
        
        myArr.forEach(function(valueObject) {
           ratingObject[valueObject.rating] = ratingObject[valueObject.rating] ? ratingObject[valueObject.rating] + 1 : 1;
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-18
          • 1970-01-01
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-28
          相关资源
          最近更新 更多