【问题标题】:Array of flat objects, extract values of a all properties into single object of arrays [duplicate]平面对象数组,将所有属性的值提取到数组的单个对象中[重复]
【发布时间】:2020-04-10 19:23:19
【问题描述】:

我想从这里开始:

[{
  "uuid": 'oaiwngoiasofoi328',
  "property1": 3,
  "property2": 3,
  ...many
},
...many ]

到这里:

{
  "uuid": ['oaiwngoiasofoi328','829rh83hr9h9h29','mejieoainfoi',...],
  "property1": [3,3,2,...],
  "property2": [3,3,2,...],
  ...many
}

源数组的每个对象中的所有属性都将被命名为相同

也许我可以在 map 中使用 for 循环...??

【问题讨论】:

  • 是的,你可以。你试过了吗?
  • 我想知道是否有一个现有的例子,因为我仍在努力思考如何做到这一点。我花了过去 20 分钟试图找到类似的东西
  • 我认为你应该从简单的开始尝试两个嵌套的for 循环。

标签: javascript object


【解决方案1】:

我已经重新创建了您的环境。我认为它可以帮助你。

使用Array.reduce() 将其缩减为单个对象。

const data = [
  {
    uuid: 'adadkljalkd',
    'property1': 3,
    'property2': 4,
  },
  {
    uuid: 'alkisdfj',
    'property1': 4,
    'property2': 5,
  },
  {
    uuid: 'klilkkll',
    'property1': 7,
    'property2': 8,
  }
];

const res = data.reduce((acc, obj) => {
  Object.keys(obj).forEach(key => {
    acc[key] = acc[key] || [];
    acc[key].push(obj[key]);
  })
  return acc;
}, {});

console.log(res);

【讨论】:

  • reduce函数中原来的累加器只需要一个对象而不是数组
  • 编辑了用对象初始化累加器的答案
  • 浏览器控制台有时会欺骗你。数组不应该有属性是我的错。谢谢@Supercool。
猜你喜欢
  • 2021-05-24
  • 2018-11-14
  • 2022-01-10
相关资源
最近更新 更多