繁体   English   中英

展平嵌套对象的数组

[英]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-ofObject.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.

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