underscore.js groupBy子数组

时间:2013-11-24 01:10:54

标签: javascript underscore.js

我有一些数据

var data = [ 
    {type: "A", role:[1,2]},
    {type: "B", role:[2]},
    {type: "C", role:[2,3]},
    {type: "D", role:[3]} 
];

我正在尝试使用underscore.js

来排序'角色'
var groups = _(data).groupBy(function(el){
    return el.role
  }
);

有没有一种简单的方法可以像这样获得重新评估的数据

1: {
    {type:"A" ...}
},
2: {
   {type:"A" ...},
   {type:"B" ...},
... etc

不喜欢这个http://jsbin.com/IzEwUkim/2/edit

2 个答案:

答案 0 :(得分:5)

你可以像往常一样用_.reduce手工完成,类似这样的事情:

var groups = _(data).reduce(function(memo, o) {
    _(o.role).each(function(i) {
        memo[i] = memo[i] || [ ];
        memo[i].push(o);
    });
    return memo;
}, { });

演示:http://jsfiddle.net/ambiguous/HDE3c/

您可以使用普通的for循环代替_.each来迭代当然的角色。

_.groupBy在这里不起作用,因为函数/键总是单个值,所以我认为你手动解开role数组。

答案 1 :(得分:1)

我知道你要求下划线,但这里有本地的js:

var map = {};
data.forEach(function(obj){
  obj.role.forEach(function(roleVal){
    (map[roleVal] = map[roleVal] || []).push(obj);
  });
});
console.log(map);