如何通过键将对象转换为对象数组?
我有一个数据源:
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, b,c并使用来自外部循环的当前索引来确定从哪个对象中获取它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 之类的解决方案,该解决方案可以处理数组中的对象多于对象中的属性的情况。