[英]Reformat array of objects
我正在尝试重新格式化以下对象数组:
let users = [{
Username: "test1",
Attributes: [{
Name: "sub",
Value: "1234"
}, {
Name: "email",
Value: "test1@gmail.com"
}]
},
{
Username: "test2",
Attributes: [{
Name: "sub",
Value: "5678"
}, {
Name: "email",
Value: "test2@gmail.com"
}]
},
]
我想重新格式化为:
users: [{
Username: "test1",
sub: "1234",
email: "test1@gmail.com}, {
Username: "test2",
sub: "5678",
email: "test2@gmail.com}]
如何重新格式化此对象数组? 谢谢
您可以使用map
遍历数组。 使用reduce
将Attributes
数组汇总为一个对象。
let users = [{"Username":"test1","Attributes":[{"Name":"sub","Value":"1234"},{"Name":"email","Value":"test1@gmail.com"}]},{"Username":"test2","Attributes":[{"Name":"sub","Value":"5678"},{"Name":"email","Value":"test2@gmail.com"}]}] let result = users.map(({Username,Attributes}) => { let a = Attributes.reduce((c, v) => ({ ...c,[v.Name]: v.Value}), {}); a.Username = Username; return a; }); console.log(result);
短版:
let result = users.map(({Username, Attributes})=>({Username,...Attributes.reduce((c,v)=> ({...c, [v.Name]: v.Value}) ,{})}));
一种可能的解决方案是使用Array.map()将每个原始object
映射到一个新object
。 在map()
内部,您可以遍历Attributes
数组以将属性添加到将要返回的新object
中。
let users =[ { Username: "test1", Attributes:[ {Name: "sub", Value:"1234"}, {Name:"email", Value:"test1@gmail.com"} ] }, { Username: "test2", Attributes: [ {Name: "sub", Value:"5678"}, {Name:"email", Value:"test2@gmail.com"} ] } ]; let res = users.map(({Username, Attributes}) => { let newObj = {Username}; Attributes.forEach(({Name, Value}) => newObj[Name] = Value); return newObj; }); console.log(res);
.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}
您可以使用for...of
遍历用户。 循环遍历Attributes
,将具有2个属性的每个对象转换为键值对。 使用Object.assign()
创建合并的对象
const users=[{Username:"test1",Attributes:[{Name:"sub",Value:"1234"},{Name:"email",Value:"test1@gmail.com"}]},{Username:"test2",Attributes:[{Name:"sub",Value:"5678"},{Name:"email",Value:"test2@gmail.com"}]}]; const output = []; for(const { Username, Attributes } of users) { const attributes = Attributes.map(({ Name, Value }) => ({ [Name]: Value })); output.push(Object.assign({ Username }, ...attributes)) } console.log(output)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.