我在javascript中有这个对象:
let obj=
{
a: {
a1: [5,5],
a2: [6,6]
},
b: {
a1: [7,7],
a2: [8,8]
},
c: {
a1: [9,9],
a2: [3,3]
}
}
我想将其转换为这样的数组:
let arr =
[
{
name: 'a1',
a: [5,5],
b: [7,7],
c: [9,9]
},
{
name: 'a2',
a: [6,6],
b: [8,8],
c: [3,3]
}
]
我试图通过这种方式制作数组:
Object.entries(obj).map(([key, value]) => ({key,value}));
但是我不知道如何更改结构。
谢谢。
答案 0 :(得分:2)
您可以将reduce
与Object.entries
一起使用来创建对象,然后使用Object.values
。
let object = {"a":{"a1":[5,5],"a2":[6,6]},"b":{"a1":[7,7],"a2":[8,8]},"c":{"a1":[9,9],"a2":[3,3]}}
const result = Object.entries(object).reduce((r, [k, v]) => {
return Object.entries(v).forEach(([kn, vn]) => {
if (!r[kn]) r[kn] = {name: kn,[k]: vn}
else r[kn][k] = vn
}), r
}, {})
console.log(Object.values(result))
答案 1 :(得分:1)
您还可以使用Object.keys
和Array.reduce
实现相同的目标:
let obj = { a: { a1: [5, 5], a2: [6, 6] }, b: { a1: [7, 7], a2: [8, 8] }, c: { a1: [9, 9], a2: [3, 3] } }
const result = Object.keys(obj).reduce((r,k) => (Object.keys(obj[k]).forEach(a => {
r[a] = r[a] || { name: a }
r[a][k] = obj[k][a]
}), r), {})
console.log(Object.values(result))