Преобразование 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": [ ... ]}
]