Превратите объект вложенных объектов в объект массива вложенных объектов - PullRequest
1 голос
/ 17 марта 2020

Надеюсь, название и это описание не слишком запутаны.

ЧТО Я ИМЕЮ: Объект, содержащий два родительских объекта (firstGroup и secondGroup). Каждый из них содержит дочерние объекты.

const dataObject = {
  firstGroup: {
    0: {
      title: '0-firstGroup',
      description: '0th item in firstGroup!',
      added: 2018,
    },
    1: {
      title: '1-firstGroup',
      description: '1st item in firstGroup!',
      added: 2019,
    },
    2: {
      title: '2-firstGroup',
      description: '2nd item in firstGroup!',
      added: 2020,
    },
  },
  secondGrounp: {
    0: {
      title: '0-secondGroup',
      description: '0th item in secondGroup!',
      delicate: true,
      timestamp: '10:30:25',
    },
    1: {
      title: '1-secondGroup',
      description: '1st item in secondGroup!',
      delicate: true,
      timestamp: '14:03:11',
    },
  },
};

НЕОБХОДИМЫЕ РЕЗУЛЬТАТЫ: Я бы хотел, чтобы свойства возвращаемого объекта были родительскими массивами, содержащими соответствующие дочерние объекты в качестве элементов.

resultsDesired: {
  firstGroup: [
    {
      title: '0-firstGroup',
      description: '0th item in firstGroup!',
      added: 2018,
    },{
      title: '1-firstGroup',
      description: '1st item in firstGroup!',
      added: 2019,
    },{
      title: '2-firstGroup',
      description: '2nd item in firstGroup!',
      added: 2020,
    },
  ],
  secondGrounp: [
    {
      title: '0-secondGroup',
      description: '0th item in secondGroup!',
      delicate: true,
      timestamp: '10:30:25',
    }, {
      title: '1-secondGroup',
      description: '1st item in secondGroup!',
      delicate: true,
      timestamp: '14:03:11',
    },
  ],
};

РЕЗУЛЬТАТЫ БОНУСА: Если вы захотите попробовать и это, мне также будет интересно, чтобы свойства возвращаемого объекта были родительскими объектами, содержащими метки Родительские идентификаторы и групповые массивы с дочерними объектами в качестве элементов.

resultsBonus: {
  firstGroup: {
    label: 'firstGroup',
    group: [
      {
        title: '0-firstGroup',
        description: '0th item in firstGroup!',
        added: 2018,
      }, {
        title: '1-firstGroup',
        description: '1st item in firstGroup!',
        added: 2019,
      }, {
        title: '2-firstGroup',
        description: '2nd item in firstGroup!',
        added: 2020,
      },
    ],
  },
  secondGrounp: {
    label: 'secondGroup',
    group: [
      {
        title: '0-secondGroup',
        description: '0th item in secondGroup!',
        delicate: true,
        timestamp: '10:30:25',
      }, {
        title: '1-secondGroup',
        description: '1st item in secondGroup!',
        delicate: true,
        timestamp: '14:03:11',
      },
    ],
  },
};

РЕДАКТИРОВАТЬ - МОЯ ПРЕДЫДУЩАЯ ПОПЫТКА: @RyanWilson высказал хорошую мысль, я должен был показать, что я действительно пытался это. Сделано много попыток, все из которых были ужасными. Ниже последний, прежде чем спрашивать ...

const arr = [];

Object.keys(dataObject).forEach((key) => {
  arr.push(dataObject[key]);
});

console.log('arr ', arr);
/* LOG
[
  0: {
    0: {
      title: "0-firstGroup"
      description: "0th item in firstGroup!"
      added: 2018
    },
    1: {
      title: "1-firstGroup"
      description: "1st item in firstGroup!"
      added: 2019
    },
    2: {
      title: "2-firstGroup"
      description: "2nd item in firstGroup!"
      added: 2020
    },
  },
  1: {
    0: {
      title: "0-secondGroup",
      description: "0th item in secondGroup!",
      delicate: true,
      timestamp: "10:30:25",
    },
    1: {
      title: "1-secondGroup",
      description: "1st item in secondGroup!",
      delicate: true,
      timestamp: "14:03:11",
    },
  },  
]
*/

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Вы можете присвоить вложенные объекты массиву.

const
    dataObject = { firstGroup: { 0: { title: '0-firstGroup', description: '0th item in firstGroup!', added: 2018 }, 1: { title: '1-firstGroup', description: '1st item in firstGroup!', added: 2019 }, 2: { title: '2-firstGroup', description: '2nd item in firstGroup!', added: 2020 } },secondGrounp: { 0: { title: '0-secondGroup', description: '0th item in secondGroup!', delicate: true, timestamp: '10:30:25' }, 1: { title: '1-secondGroup', description: '1st item in secondGroup!', delicate: true, timestamp: '14:03:11' } } },
    result = Object.fromEntries(Object
        .entries(dataObject)
        .map(([k, v]) => [k, Object.assign([], v)])
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2 голосов
/ 17 марта 2020

Вы можете сделать с Object#entries создать массив с [key,value] парой объектов и Array#reduce воссоздать объект

const arr = { firstGroup: { 0: { title: '0-firstGroup', description: '0th item in firstGroup!', added: 2018, }, 1: { title: '1-firstGroup', description: '1st item in firstGroup!', added: 2019, }, 2: { title: '2-firstGroup', description: '2nd item in firstGroup!', added: 2020, }, }, secondGrounp: { 0: { title: '0-secondGroup', description: '0th item in secondGroup!', delicate: true, timestamp: '10:30:25', }, 1: { title: '1-secondGroup', description: '1st item in secondGroup!', delicate: true, timestamp: '14:03:11', }, }, };

const res = Object.entries(arr).reduce((acc,[label,group])=>( acc[label] = {label,group:Object.values(group)},acc),{});

console.log({resultsBonus:res})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...