我有这样的数据:
data = [
{
"foo": {"name":"foo-name"},
"bar": {"name":"bar-name"}
},
{
"baz": {"name":"baz-name"}
}
]
我想要的输出将是:
[
{ "foo": {"name":"foo-name"}},
{ "bar": {"name":"bar-name"}},
{ "baz": {"name":"baz-name"}}
]
如何获得此结构?我尝试使用concat
,但是意识到它在我们处理嵌套对象而不是嵌套数组时不起作用。然后,我尝试以不同的方式进行迭代,但是没有实现我想要的。一种尝试如下:
const newData = data.map((x) => {
return Object.keys(x).map(el => {
return {[el]: x};
})
})
但这只是使其更加嵌套。
答案 0 :(得分:4)
您可以使用flatMap
let data = [{"foo": {"name":"foo-name"},"bar": {"name":"bar-name"}},{"baz": {"name":"baz-name"}}]
let final = data.flatMap(a => Object.entries(a).map(([k, v]) => ({
[k]: v
})))
console.log(final)
答案 1 :(得分:3)
一种选择是将reduce
放入一个数组,遍历每个对象的条目并将其推入累加器:
const data = [
{
"foo": {"name":"foo-name"},
"bar": {"name":"bar-name"}
},
{
"baz": {"name":"baz-name"}
}
];
const output = data.reduce((a, obj) => {
Object.entries(obj).forEach(([key, val]) => {
a.push({ [key]: val });
});
return a;
}, []);
console.log(output);
答案 2 :(得分:2)
我将使用一个简单的for-of
并将Object.entries
映射到对象:
const result = [];
for (const obj of data) {
result.push(
...Object.entries(obj).map(
([key, value]) => ({[key]: value})
)
);
}
实时示例:
const data = [
{
"foo": {"name":"foo-name"},
"bar": {"name":"bar-name"}
},
{
"baz": {"name":"baz-name"}
}
];
const result = [];
for (const obj of data) {
result.push(
...Object.entries(obj).map(
([key, value]) => ({[key]: value})
)
);
}
console.log(result);