У меня есть массив массивов, который выглядит так:
var arrays = [[1,2,3,4,5],
[1,2,6,4,5],
[1,3,6,4,5],
[1,2,3,6,5],
[1,7,5],
[1,7,3,5]]
Я хочу использовать d3.nest()
или даже просто стандартный javascript для преобразования этих данных во вложенную структуру данных, которую я могу использовать с d3.partition
.
В частности, я хочу создать этот flare.json
данных flare.json
.
Уровни объекта json, которые я хочу создать с помощью d3.nest()
соответствуют позициям индекса в массиве. Обратите внимание, что 1
находится в первой позиции во всех подмассивах в приведенных выше примерах данных; следовательно, это в корне дерева. На следующих позициях в массивах есть три значения, 2
, 3
и 7
, поэтому корневое значение 1
имеет 3 дочерних элемента. На данный момент дерево выглядит так:
1
/ | \
2 3 7
На третьей позиции в подмассивах находятся четыре значения, 3
, 5
и 6
. Эти дети будут места в дереве следующим образом:
1
____|___
/ | \
2 3 7
/ \ / / \
3 6 6 3 5
Как я могу создать эту структуру данных, используя d3.nest()
? Полная структура данных с примерами данных, которые я показал выше, должна выглядеть следующим образом:
{"label": 1,
"children": [
{"label": 2, "children": [
{"label": 3, "children": [
{"label": 4, "children": [
{"label": 5}
]},
{"label": 6, "children": [
{"label": 5}
]}
]},
{"label": 6, "children": [
{"label": 4, "children": [
{"label": 5}
]}
]},
{"label": 3, "children": [
{"label": 6, "children": [
{"label": 4, "children": [
{"label": 5}
]}
]}
]},
{"label": 7, "children": [
{"label": 3, "children": [
{"label": 5}
]},
{"label": 5}
]}
]}
]}
Я пытаюсь преобразовать мою структуру данных массива выше, используя что-то вроде этого (очень неправильно):
var data = d3.nest()
.key(function(d, i) { return d.i; })
.rollup(function(d) { return d.length; })
Я целую неделю ломал голову, пытаясь понять, как я могу создать эту иерархическую структуру данных из массива массивов. Я был бы очень благодарен, если бы кто-нибудь мог мне помочь.
Ответ @meetamit в комментариях хорош, но в моем случае мое дерево слишком глубокое, чтобы неоднократно применять .keys()
к данным, поэтому я не могу вручную написать такую функцию.