2013-12-24 129 views
0

我找到了_.groupBy,它通过设置你想要分组的属性来处理对象,但没有找到一个用于分组数组的数组。下划线:具有共同第二索引值的组数组?

arrays = [[0,'A','01010'],[4,'CD','1111'],[9,'FF','01010'],[6,'AX','01010']] 

.groupBy什么也没有。我想按每个数组中的第三个值进行分组。

什么,如果我想通过组第一和第三数组值?

回答

4

_.groupBy()作用于数组或对象,并允许您指定一个迭代器功能。

所以这将GROUP BY每个阵列中的第3个值:

_.groupBy(arrays, function(num){return num[2]}); 

demo fiddle

你也可以使用第一和第三值。你究竟是怎么做的,取决于你想如何结合这两个值。比如这个:

_.groupBy(arrays, function(num){return num[0]+'.'+num[2]}); 

结果:

Object {0.01010: Array[1], 4.1111: Array[1], 9.01010: Array[1], 6.01010: Array[1]} 

考虑您的数据。

或者,如果你想组由第三值,然后组合这些结果通过第一个值,我们可以这样做:

var out = _.groupBy(arrays, function(num){return num[2] }); 
out2={}; 
for (var prop in out) { 
    out2[prop] = _.groupBy(out[prop],function(num) {return num[0]}); 
} 

其中,有这样的数据:

阵列= [ [0, 'A', '01010'],[4, 'CD', '1111'],[9, 'FF', '01010'],[6, 'AX', '01010'],[0 ,'AX','01010']]`

(因此我们有一个重复的第一项)产生:

01010:对象0:数组[2] 6:数组[1] 9:数组[1] 1111:对象4:数组[1]

demo of that

+0

什么,如果,如果我想按第一和第三组进行分组? – KJW

+0

看到我更新的答案 - 是你想到的? – KayakDave

+0

分组时,一定要小心'num [0] + num [2]',一些'num [2]'值长度为四和五,所以你可以轻松地将两个不同的条目混合到一个组中。 –

相关问题