loDash-对数组进行分组并填充数组 [英] lodash - group and populate arrays
本文介绍了loDash-对数组进行分组并填充数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用lodash,我如何将生日相同的人的姓名分组,如下所示?
我使用嵌套的for循环写出了这一点,但是我想在lodash中会有一种更优雅的方式来实现这一点。我没怎么用过,想知道该用哪种功能。
[
{ "birthdate": "1993", "name": "Ben" },
{ "birthdate": "1994", "name": "John" },
{ "birthdate": "1995", "name": "Larry" },
{ "birthdate": "1995", "name": "Nicole" },
{ "birthdate": "1996", "name": "Jane" },
{ "birthdate": "1996", "name": "Janet" },
{ "birthdate": "1996", "name": "Dora" },
]
至
[
{ "birthdate": "1993", "names": [ "Ben" ] },
{ "birthdate": "1994", "names": [ "John"] },
{ "birthdate": "1995", "names": [ "Larry", "Nicole" ] },
{ "birthdate": "1996", "names": [ "Jane", "Janet", "Dora" ] }
]
推荐答案
您可以使用groupBy()按birthdate
对集合中的每一项进行分组。对项目进行分组后,可以使用map()迭代每个组,并将其形成包含birthdate
和names
的新格式。若要从分组的项目中获取名称数组,可以再次使用map()函数返回所有name
值。
var result = _(source)
.groupBy('birthdate')
.map(function(items, bdate) {
return {
birthdate: bdate,
names: _.map(items, 'name')
};
}).value();
var source = [
{ "birthdate": "1993", "name": "Ben" },
{ "birthdate": "1994", "name": "John" },
{ "birthdate": "1995", "name": "Larry" },
{ "birthdate": "1995", "name": "Nicole" },
{ "birthdate": "1996", "name": "Jane" },
{ "birthdate": "1996", "name": "Janet" },
{ "birthdate": "1996", "name": "Dora" },
];
var result = _(source)
.groupBy('birthdate')
.map(function(items, bdate) {
return {
birthdate: bdate,
names: _.map(items, 'name')
};
}).value();
document.body.innerHTML = '<pre>' + JSON.stringify(result, 0, 4) + '</pre>';
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
这篇关于loDash-对数组进行分组并填充数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文