我也需要通过也是数组的属性对对象数组进行分组。

这是我的初始数组

var videos = [
   {
    name: 'Video 1',
    productInfo:{
        categories: ['cat1', 'cat2']}
   },
   {
    name: 'Video 2',
    productInfo:{
        categories: ['cat2']}
   },
   {
    name: 'Video 3',
    productInfo:{
        categories: ['cat1', 'cat3']}
   }
];

当我用这个
_.groupBy videos, 'productInfo.categories'

我的回应是
 {
  'cat1, cat2': Array[1],
  'cat1, cat3': Array[1],
  'cat2': Array[1]
 }

我已经尝试了另一个问同样问题的家伙的答案,结果却不同。

尝试他的解决方案
_.groupBy _.flatten _.pluck videos, 'productInfo.categories'

我懂了
{
  'cat1': ['cat1', 'cat1'],
  'cat2': ['cat2', 'cat2'],
  'cat3': ['cat3']
}

我需要回应
{
'cat1': [videoObject, videoObject],
'cat2': [videoObject, videoObject],
'cat3': [videoObject]
}

谢谢你的帮助!

最佳答案

var res = _.reduce(videos, function(result, video){
    return _.reduce(video.productInfo.categories, function(acc, category){
        (acc[category] || (acc[category] = [])).push(video);
        return acc;
    }, result);
}, {});

10-07 19:39