繁体   English   中英

重新格式化对象数组

[英]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遍历数组。 使用reduceAttributes数组汇总为一个对象。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM