javascript - LoDash - 按数组属性分组而不将值作为一个键

标签 javascript arrays coffeescript lodash

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

这是我的初始数组

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);
}, {});

关于javascript - LoDash - 按数组属性分组而不将值作为一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34234317/

相关文章:

javascript - JSON ParseError 即使请求成功

coffeescript - 如何在 Rails 5 上禁用 CoffeeScript

javascript toString 将长数字转换为无穷大

javascript - 当输入字段为空时,jQuery 验证不起作用

javascript - 如何在 View 模型内容更新上调用 Jquery 函数

C++ 从文件中计算字符数组中的特定计数器

c++ - 显示用户创建的数组 C++ 中的数字

javascript - 查找变量 - Javascript

java - 使用给定整数数组达到目标总和以避免某些数字的算法?

javascript - 异步函数的 Mocha 测试