我有一个嵌套的对象数组,看起来像这样:
[
[
{
name: 'name',
prettyFormat: 'joe bloggs'
uselessInfo: 'drjfghsdr'
},
{
name: 'email',
answer: '[email protected]',
uselessInfo: 'liodrgjiwe'
}
]
[
{
name: 'name',
prettyFormat: 'mark obrien',
uselessInfo: 'drjfghsdr'
},
{
name: 'email',
answer: 'mark [email protected]',
uselessInfo: 'liodrgjiwe'
}
]
]
我需要将这个数组转换成更合理的东西,实际上是一个 JSON 对象,格式如下:
{
"LIST": [
{
"name": "joe bloggs",
"email": "[email protected]",
},
{
"name": "mark o'brien",
"email": "mark [email protected]",
},
]
}
这是我的解决方案:
let outputBuilder = []
staffSubmissionsArray.forEach(subArray => {
let personObj = {}
subArray.forEach(obj => {
if (obj.name == 'name') {
personObj['name'] = obj.prettyFormat
} if (obj.name == 'email') {
personObj['email'] = obj.answer
}
outputBuilder.push(personObj)
})
})
console.log(JSON.stringify({ "LIST" : outputBuilder })
这使所有内容都变成正确的格式,但是,每个人都会被复制,大概每次我迭代每个对象时,但我不知道如何解决这个问题。我需要以不同的方式处理这个问题吗?
map
和 reduce
:
const data = [
[
{
name: 'name',
prettyFormat: 'joe bloggs',
uselessInfo: 'drjfghsdr'
},
{
name: 'email',
answer: '[email protected]',
uselessInfo: 'liodrgjiwe'
}
],
[
{
name: 'name',
prettyFormat: 'mark obrien',
uselessInfo: 'drjfghsdr'
},
{
name: 'email',
answer: 'mark [email protected]',
uselessInfo: 'liodrgjiwe'
}
]
];
const transformedData = {
LIST: data.map(innerArray =>
innerArray.reduce((acc, item) => {
if (item.name === 'name') {
acc.name = item.prettyFormat;
} else if (item.name === 'email') {
acc.email = item.answer;
}
return acc;
}, {})
)
};
console.log(JSON.stringify(transformedData, null, 2));