Преобразование nest

Преобразование nest создаёт иерархическую структуру (дерево), группируя входные объекты по различным значениям полей. Созданные объекты узлов затем можно передать преобразованиям размещения дерева: tree, treemap, pack и partition.

Пример

Параметры преобразования

Свойство Тип Описание
generate Boolean Включать ли созданные нелистовые узлы в выходной поток (по умолчанию false). Обычно в нём остаются только входные объекты — листья. Внутренние узлы имеют другой набор свойств: например, key со значением, извлечённым из полей параметра keys.
keys Field[ ] Поля данных, определяющие уровни дерева. Сначала объекты группируются по первому полю, затем для каждого следующего поля создаётся дополнительный уровень. Если поля не заданы, все объекты становятся дочерними узлами одной группы.

Использование

{
  "type": "nest",
  "keys": ["job", "region"]
}

Создаёт дерево из входных объектов. От корневого узла формируются группы дочерних узлов по различным значениям поля job, затем внутри каждой такой группы — по значениям region. Входные объекты становятся листьями соответствующих групп.

Например, для следующих входных данных:

[
  {"id": "A", "job": "Doctor", "region": "East"},
  {"id": "B", "job": "Doctor", "region": "East"},
  {"id": "C", "job": "Lawyer", "region": "East"},
  {"id": "D", "job": "Lawyer", "region": "East"},
  {"id": "E", "job": "Doctor", "region": "West"},
  {"id": "F", "job": "Doctor", "region": "West"},
  {"id": "G", "job": "Lawyer", "region": "West"},
  {"id": "H", "job": "Lawyer", "region": "West"}
]

получается такое дерево:

                  /- East - [A, B]
       /- Doctor -
      /           \- West - [E, F]
Root -
      \           /- East - [C, D]
       \- Lawyer -
                  \- West - [G, H]

Если generate равно true, выходной поток дополнительно содержит созданные внутренние узлы. Для примера выше поток выглядит так:

[
  // исходные входные узлы
  {"id": "A", "job": "Doctor", "region": "East"},
  {"id": "B", "job": "Doctor", "region": "East"},
  {"id": "C", "job": "Lawyer", "region": "East"},
  {"id": "D", "job": "Lawyer", "region": "East"},
  {"id": "E", "job": "Doctor", "region": "West"},
  {"id": "F", "job": "Doctor", "region": "West"},
  {"id": "G", "job": "Lawyer", "region": "West"},
  {"id": "H", "job": "Lawyer", "region": "West"},

  // созданные внутренние узлы
  // у корневого узла key не определён
  // массивы values содержат вложенные группы объектов
  {"values": [ ... ] },
  {"key": "Doctor", "values": [ ... ]},
  {"key": "Lawyer", "values": [ ... ] },
  {"key": "East", "values": [ ... ]},
  {"key": "West", "values": [ ... ]},
  {"key": "East", "values": [ ... ]},
  {"key": "West", "values": [ ... ]}
]