loDash-对数组进行分组并填充数组 [英] lodash - group and populate arrays

查看:27
本文介绍了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()迭代每个组,并将其形成包含birthdatenames的新格式。若要从分组的项目中获取名称数组,可以再次使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆