Как преобразовать Object {} в Array [] объектов с различной структурой? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть этот объект в 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 голосов
/ 12 декабря 2018

Вы также можете достичь того же с 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))
0 голосов
/ 12 декабря 2018

Вы можете использовать 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...