如何将对象{}转换为具有不同结构的对象的数组[]?

时间:2018-12-12 14:18:15

标签: javascript arrays object

我在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}));

但是我不知道如何更改结构。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以将reduceObject.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.keysArray.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))