Javascript Lodash或JS GroupBy和数组数组计数

Javascript Lodash或JS GroupBy和数组数组计数,javascript,lodash,Javascript,Lodash,我有一个意见: results = [ [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "ian.warner@drykiss.com", "DryKISS1", "small", "SW192EZ", "undefined" ], [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "ian.warner@drykiss.com", "DryKISS2", "la

我有一个意见:

results = [
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "ian.warner@drykiss.com", "DryKISS1", "small", "SW192EZ", "undefined" ],
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "ian.warner@drykiss.com", "DryKISS2", "large", "SW192EZ", "undefined" ],
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "ian.warner@drykiss.com", "DryKISS2", "large", "SW192EZ", "undefined" ],
    [ "Mon Nov 14 08:08:14 GMT+07:00 2016", "Ian Warner", "ian.warner@drykiss.com", "DryKISS2", "medium", "SW192EZ", "undefined" ],
]
我希望输出像这样

small
  DryKISS1 : 1
medium
  DryKISS2 : 1
large
  DryKISS1 : 5
  DryKISS2 : 2
  DryKISS3 : 1
基本上是按大小分组,然后在相同大小的括号中对公司名称求和

我一直在玩下面的内容,但由于大多数示例都是针对散列/对象的,所以我会迷失方向

console.log _.chain( results ).groupBy( 4 ).map( ( value, key ) ->
  [
    key
    _.reduce( value, ( ( result, currentObject ) ->
      {
        company: result[ 3 ]
      }
    ))
  ]
).value()

在普通Javascript中,您可以使用具有嵌套属性的对象进行计数

var结果=[[“周一11月14日08:08:14格林尼治标准时间+2016年07:00”,“伊恩·沃纳”,“伊恩·沃纳”。warner@drykiss.com“,”DryKISS1“,”小型“,”SW192EZ“,”未定义“,[“周一11月14日08:08:14 GMT+2016年07:00”,“伊恩·华纳”,“伊恩。warner@drykiss.com“,“DryKISS2”,“大型”,“SW192EZ”,“未定义”],[“周一11月14日08:08:14 GMT+2016年07:00”,“伊恩·华纳”,“伊恩。warner@drykiss.com",“DryKISS2”,“大型”,“SW192EZ”,“未定义”],[周一11月14日08:08:14 GMT+2016年07:00”,“伊恩·华纳”,“伊恩。warner@drykiss.com“,”DryKISS2“,”中等“,”SW192EZ“,”未定义“],
分组={};
结果:forEach(功能(a){
分组的[a[4]]=分组的[a[4]| |{};
分组[a[4]][a[3]=(分组[a[4]][a[3]]||0)+1;
});

控制台日志(分组)按第4列分组,然后使用transform按第3列对项目进行计数:

var数据=[
[“周一11月14日08:08:14格林尼治标准时间+2016年07:00”,“伊恩·华纳”,“伊恩。warner@drykiss.com“,“DryKISS1”,“小型”,“SW192EZ”,“未定义”],
[“周一11月14日08:08:14格林尼治标准时间+2016年07:00”,“伊恩·华纳”,“伊恩。warner@drykiss.com“,“DryKISS2”,“大型”,“SW192EZ”,“未定义”],
[“周一11月14日08:08:14格林尼治标准时间+2016年07:00”,“伊恩·华纳”,“伊恩。warner@drykiss.com“,“DryKISS2”,“大型”,“SW192EZ”,“未定义”],
[“周一11月14日08:08:14格林尼治标准时间+2016年07:00”,“伊恩·华纳”,“伊恩。warner@drykiss.com“,“DryKISS2”,“中等”,“SW192EZ”,“未定义”],
];
var结果=(数据)
.groupBy(4)
.转换(功能(结果、项、键){
结果[键]=计数依据(项目3);
})
.value();
控制台日志(结果)

您能否更详细地解释一下,您希望提供的数据如何成为预期的输出,因为我看不到它。首先,我无法在您提供的数据中看到任何DryKISS3。还有就是你的真实电子邮件地址,如果你知道废品商可能会抓住这个地址,你会被垃圾邮件攻击……)<代码>我希望输出类似于
,看起来不一样。:)这很可能是他想要的,但如果OP能使数据源和预期结果重现,那就太好了。非常感谢-我试图找到一种洛达斯方法,但这是一种简单的普通方法,我觉得应该使用。啊,一个问题,我该如何对这些数据进行排序,以使计数处于首位?对象没有顺序。您将获取数组中的键并对数组进行排序。虽然你有两个级别,但你也需要对nesed级别进行排序。哇-似乎排序比迭代更复杂。。。非常感谢,希望这能帮助别人。似乎当我搜索数组分组时,我得到了如此多的回复,其中包含对象/集合或散列取决于语言任何thx我选择了下面的JS版本,但也给了你一票。