2014-10-03 78 views
1

我與我的分組類別陣列集合在這樣的例子掙扎:Underscore.js - GROUPBY嵌套陣列

var programs = [ 
    { 
    name: 'a', 
    categories: ['cat1', 'cat2'] 
    }, 
    { 
    name: 'b', 
    categories: ['cat2'] 
    }, 
    { 
    name: 'c', 
    categories: ['cat1', 'cat3'] 
    } 
]; 

如果你這樣做:

_.groupBy(programs, function(item){ return item.categories; }); 

它返回:

{ 
    'cat1, cat2': Array[1], 
    'cat1, cat3': Array[1], 
    'cat2': Array[1] 
} 

回答

3

經過互聯網搜索後,我試了我自己的,並與Underscore.js

最後我得到了這對我的作品的解決方案:

var group = _.groupBy(_.flatten(_.pluck(programs, 'categories')), function(item){ 
    return item; 
}); 

這將返回:

{ 
    'cat1': Array[2], 
    'cat2': Array[2], 
    'cat3': Array[1] 
} 

http://jsfiddle.net/pypurjf3/2/

我希望這將幫助一些人用同樣的問題所困擾。

+0

尼斯時間:-)正是我一直在尋找(從字面上看,我也有多個類別)。 – Kallex 2014-10-06 17:09:51

+0

顯然這並沒有解決我的情況,但無論如何,給了洞察力和想法追求前進。 – Kallex 2014-10-06 18:17:33

+0

你有我的小提琴嗎?也許我可以幫助你。 – BastianW 2014-10-06 23:01:15

0

我有類似的問題,但想要多做一些分組出來。這是我結束了:

function groupByNested(theList, whichValue) { 
 
    // Extract unique values, sort, map as objects 
 
    var groups = _.chain(theList).pluck(theList, whichValue).flatten().uniq().reject(function(v) { return v==''; }).sort().map(function(g) { return { group: g, items: [] }; }).value(); 
 
    
 
    // Iterate through the array and add applicable items into the unique values list 
 
    _.each(_ls.plants, function(p) { 
 
    _.each(p[whichValue], function(v) { 
 
     theGroup = _.find(groups, function(g) { return g.group == v; }); 
 
     theGroup.items.push(p); 
 
    }); 
 
    }); 
 
    return groups; 
 
}