Объекты со значениями Array в дерево - PullRequest
1 голос
/ 12 апреля 2019

У меня есть массив объектов, где у каждого объекта есть массив значений.Структура данных не идеальна, но это единственный способ получить к ней доступ.Я пытаюсь превратить эту структуру в древовидную структуру, чтобы я мог создать складную таблицу с отступом D3.

Я пытался изменить некоторые предыдущие ответы, которые я нашел, но пока не увенчался успехом.Вот ссылка на текущий JSFiddle, над которым я работал.

http://jsfiddle.net/COLTstreet/fsve7w2L/25/

Это небольшой пример того, как данные приходят ко мне.

{
  "data": [
    {
      "items": [
        "All Other",
        "4C FOODS CORP"
      ],
      "hints": {
        "index": 0
      }
    },
    {
      "items": [
        "All Other",
        "PBNA"
      ],
      "hints": {
        "index": 14
      }
    },
    {
      "items": [
        "All Other",
        "PRIVATE LABEL"
      ],
      "hints": {
        "index": 15
      }
    },
    {
      "items": [
        "Base Water",
        "CCNA"
      ],
      "hints": {
        "index": 18
      }
    },
    {
      "items": [
        "Base Water",
        "CRYSTAL GEYSER"
      ],
      "hints": {
        "index": 19
      }
    }
  ]
}

Мне нужен код, чтобы закончить так:

[
  {
    "Category": "All Other",
    "children": [
      {
        "name": "4C FOODS CORP"
      },
      {
        "name": "PBNA"
      },
      {
        "name": "PRIVATE LABEL"
      }
    ]
  },
  {
    "Category": "Base Water",
    "children": [
      {
        "name": "CCNA"
      },
      {
        "name": "CRYSTAL GEYSER"
      }
    ]
  }
]

1 Ответ

0 голосов
/ 13 апреля 2019

Одно из решений заключается в том, чтобы сначала использовать Array.reduce () в сочетании с деструктурированием , чтобы сгенерировать object для группировки элементов по категории, и на втором шаге использовать Array.map () над сгенерированным объектом entries, чтобы получить желаемый результат:

const input = {
  "data": [
    {"items": ["All Other", "4C FOODS CORP"], "hints": {"index": 0}},
    {"items": ["All Other", "PBNA"], "hints": {"index": 14}},
    {"items": ["All Other", "PRIVATE LABEL"], "hints": {"index": 15}},
    {"items": ["Base Water", "CCNA"], "hints": {"index": 18}},
    {"items": ["Base Water", "CRYSTAL GEYSER"], "hints": {"index": 19}}
  ]
};

// Group by the category.
let res = input.data.reduce((acc, {items: [cat, val]}) =>
{
    acc[cat] = acc[cat] || [];
    acc[cat].push({name: val});
    return acc;
}, {});

// Generate desired output structure.
res = Object.entries(res).map(([k, v]) => ({category: k, children: v}));

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...