首页 > 解决方案 > JavaScript 通过键将对象数组转换为对象

问题描述

我有一组像这样的对象:

[
  {
    name: 'John',
    email: 'user@mail.com',
    city: 'London',
    type: 'CLIENT'
  },
  {
    name: 'Steve',
    email: 'stave@mail.com',
    city: 'Rome',
    type: 'USER'
  },
  {
    name: 'Mark',
    email: 'mark@mail.com',
    city: 'Paris',
    type: 'ADMIN'
  }
]

我需要把它变成这样的东西:

{
  CLIENT: {
     name: 'John',
     email: 'user@mail.com',
     city: 'London'
  },
  USER: {
     name: 'Steve',
     email: 'stave@mail.com',
     city: 'Rome',
  },
  ADMIN: {
     name: 'Mark',
     email: 'mark@mail.com',
     city: 'Paris',
     type: 'ADMIN'
  }
}

最好的方法是什么?

谢谢

标签: javascriptarraysobject

解决方案


使用Array#reduce简单的对象解构来获得您想要的结果:

const data = [{
    name: 'John',
    email: 'user@mail.com',
    city: 'London',
    type: 'CLIENT'
  },
  {
    name: 'Steve',
    email: 'stave@mail.com',
    city: 'Rome',
    type: 'USER'
  },
  {
    name: 'Mark',
    email: 'mark@mail.com',
    city: 'Paris',
    type: 'ADMIN'
  }
];

const result = data.reduce((acc, { type, ...obj }) => {
  acc[type] = obj;
  return acc;
}, {})

console.log(result);


推荐阅读