为了账号安全,请及时绑定邮箱和手机立即绑定

展平嵌套对象数组

展平嵌套对象数组

芜湖不芜 2021-09-30 17:54:58
我有这样的数据: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};  })})但这只会使它更加嵌套。
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-09-30
?
侃侃无极

TA贡献2051条经验 获得超10个赞

一种选择是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);


查看完整回答
反对 回复 2021-09-30
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我会使用一个简单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);


查看完整回答
反对 回复 2021-09-30
  • 3 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信