如何通过键将对象转换为对象数组?

我有一个数据源:

const data = {
  A: [{
    value: 1
  }, {
    value: 2
  }, {
    value: 38
  }],
  B: [{
    value: 46
  }, {
    value: 23
  }, {
    value: 32
  }],
  C: [{
    value: 2345
  }, {
    value: 56
  }, {
    value: 3
  }]
}

我需要在一个对象数组中转换这个对象,如下所示:

[{
  A: 1,
  B: 46,
  C: 2345
}, {
  A: 2,
  B: 23,
  C: 56
}, {
  A: 38,
  B: 32,
  C: 3
}]

我做了一些尝试,但仍然没有:

一种)

const result = Object.keys(data).map(key => data[key])

b)

const b = Object.keys(data).reduce((acc, curr, i) => {
  const values = data[curr].map(el => el.value)

  acc[curr] = values[i]

  return acc


}, [])

编辑:

所有数组(A、B、C)都应该具有相同的长度。如果没有,则缺失值应为“-”

例如:

[{
  A: 1,
  B: 46,
  C: 2345
}, {
  A: 2,
  B: 23,
  C: 56
}, {
  A: 38,
  B: 32,
  C: -
}]

回答

假设您的值数组中的data对象数量与您的对象中的属性数量相同(或小于),您可以将您的data键映射到您可以使用Object.fromEntries(). 您可以将映射值数组传递给此 fromEntries 调用,该调用遍历您的所有键a, bc并使用来自外部循环的当前索引来确定从哪个对象中获取它value

const data = { A: [{ value: 1 }, { value: 2 }, { value: 38 }], B: [{ value: 46 }, { value: 23 }, { value: 32 }], C: [{ value: 2345 }, { value: 56 }, { value: 3 }] };

const res = Object.keys(data).map((_, i, arr) => 
  Object.fromEntries(arr.map(key => [key, data[key][i]?.value ?? "-"]))
);

console.log(res);

如果您需要更强大的方法,我建议您使用诸如TJ Crowder's 之类的解决方案,该解决方案可以处理数组中的对象多于对象中的属性的情况。


以上是如何通过键将对象转换为对象数组?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>