[英]Flatten array of nested objects
我有这样的数据:
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};
})
})
但这只是让它更嵌套。
您可以使用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)
一种选择是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);
我将使用一个简单的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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.