我有一些数据
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
答案 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);