猿问

展平嵌套对象数组

我有这样的数据:


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};

  })

})

但这只会使它更加嵌套。


芜湖不芜
浏览 185回答 3
3回答

神不在的星期二

您可以使用 flatMaplet 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);

宝慕林4294392

我会使用一个简单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);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答