在Javascript中使用Lodash或下划线的具有多列的GroupBy

在Javascript中使用Lodash或下划线的具有多列的GroupBy,javascript,json,underscore.js,lodash,Javascript,Json,Underscore.js,Lodash,转换JSON结构时遇到问题。我的JSON结构如下所示 const member = [{ memberId: 4, memberName: 'ABC', age: 22, eventId: 5, eventName: 'Dance' }, { memberId: 4, memberName: 'ABC', age: 22, eventId: 6, eventName: 'Music' }, {

转换JSON结构时遇到问题。我的JSON结构如下所示

const member = [{
    memberId: 4,
    memberName: 'ABC',
    age: 22,
    eventId: 5,
    eventName: 'Dance'
  },
  {
    memberId: 4,
    memberName: 'ABC',
    age: 22,
    eventId: 6,
    eventName: 'Music'
  },
  {
    memberId: 4,
    memberName: 'ABC',
    age: 22,
    eventId: 7,
    eventName: 'FootBall'
  },
  {
    memberId: 5,
    memberName: 'PQR',
    age: 24,
    eventId: 6,
    eventName: 'Music'
  },
  {
    memberId: 5,
    memberName: 'PQR',
    age: 24,
    eventId: 5,
    eventName: 'Dance'
  },
]
这里我有两个成员与相关事件。我想如下转换JSON

const member = [
  {
    memberId: 4,
    memberName: 'ABC',
    age: 22,
    events: [
      {
        id: 5,
        name: 'Dance'
      },
      {
        id: 6,
        name: 'Music'
      },
      {
        id: 7,
        name: 'FootBall'
      }
    ]
  },
  {
    memberId: 5,
    memberName: 'PQR',
    age: 24,
    events: [
      {
        id: 6,
        name: 'Music'
      },
      {
        id: 5,
        name: 'Dance'
      }
    ]
  }
]
我尝试使用下面的代码创建结构,但它没有提供所需的输出。它只创建两个键值对

var result = _.chain(member)
            .groupBy("memberId")
            .pairs()
            .map(function(currentItem) {
                return _.object(_.zip(["memberId", "events"], currentItem));
            })
            .value();

我不知道如何在层次结构中添加JSON的其他值。

将项目分组后,映射它们。取每组的第一个项目,删除事件属性,并将其展开。要获取事件数据,请映射组的项目并仅获取相关的事件属性:

const member=[{“memberId”:4,“memberName”:“ABC”,“age”:22,“eventId”:5,“eventName”:“Dance”},{“memberId”:4,“memberName”:“ABC”,“age”:22,“memberName”:“ABC”,“age”:22,“eventId”:7,“eventName”:“FootBall”},{“memberId”:5,“memberName”:“PQR”,“age”:24,“eventId”:6,“eventName”:“Music”},{“memberId”:5,“成员名称”:“PQR”,“年龄”:24,“事件ID”:5,“事件名称”:“舞蹈”}]
const result=(成员)
.groupBy('memberId')
.map(组=>({
…省略(u.head(group),['eventId','eventName']),
events:u2;.map(组,o=>({id:o.eventId,name:o.eventName}))
}))
.value();
console.log(结果)

谢谢你的回答,但是当我尝试使用Angular代码时,我得到了一个错误:“下划线\网页包\导入的\模块\分组方式(…)。映射不是函数。”“遗漏了什么。您可能使用下划线而不是lodash,或者您可能在打包东西的方式上有问题。这与问题和答案都没有关系。答案是否符合您的要求?是否可以使用下划线执行此操作?