JavaScript通过键将对象数组转换为对象

JavaScript通过键将对象数组转换为对象,javascript,arrays,object,Javascript,Arrays,Object,我有一个像这样的对象数组: [ { 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'

我有一个像这样的对象数组:

[
  {
    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'
  }
}
最好的方法是什么

感谢您

使用
数组#reduce
进行简单的对象分解,以获得您想要的结果:

const数据=[{
姓名:'约翰',
电邮:'user@mail.com',
城市:“伦敦”,
类型:“客户端”
},
{
姓名:'史蒂夫',
电邮:'stave@mail.com',
城市:“罗马”,
类型:“用户”
},
{
姓名:'马克',
电邮:'mark@mail.com',
城市:“巴黎”,
键入:“管理员”
}
];
const result=data.reduce((acc,{type,…obj})=>{
acc[类型]=obj;
返回acc;
}, {})
控制台日志(结果)对于中或中即将出现的对象rest属性,您可以选择
类型
属性,并将rest属性用于新对象进行赋值

var数组=[{name:'John',email:'user@mail.com“,城市:'London',键入:'CLIENT'},{姓名:'Steve',电子邮件:'stave@mail.com,城市:'Rome',键入:'USER'},{name:'Mark',电子邮件:'mark@mail.com,城市:'Paris',键入:'ADMIN'}],
object=object.assign(…array.map(({type,…o})=>({[type]:o}));
console.log(对象)
.as控制台包装{max height:100%!important;top:0;}
您还可以使用和来获得所需的结果

演示

var arr=[{name:'John',email:'user@mail.com“,城市:'London',键入:'CLIENT'},{姓名:'Steve',电子邮件:'stave@mail.com,城市:'Rome',键入:'USER'},{name:'Mark',电子邮件:'mark@mail.com,城市:'Paris',键入:'ADMIN'}];
log(arr.reduce((r,{type,{rest})=>Object.assign(r,{[type]:rest}),{})

.as控制台包装{max height:100%!important;top:0;}
如果数组中有多个对象具有相同的
类型
值,该怎么办?