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;}
如果数组中有多个对象具有相同的类型
值,该怎么办?