Мне дано множество различных шаблонов символов, см. Ниже data
, и я пытаюсь вложить данные в иерархическую форму JSON для вставки в визуализацию солнечных лучей. Каждый шаблон состоит из n
символов, хотя те, которые указаны ниже, составляют 8 символов. Чтобы обсудить желаемый результат:Char Sequence к иерархическому JSON - d3.sunburst
- На уровне 0 найдите количество уникальных символов. Ответ: ['w', 'm'].
- Возьмите первый ключ «w» и найдите все уникальные символы, которые находятся на уровне 1, затем перейдите на уровень 2 и так далее, пока не нанесете конец рисунку, в котором мы вычисляем размер этого уникального рисунка в конце.
- Повторите # 2 для второго ключа 'm'
- Вставьте результат в
children
property ofroot
.
Я смог построить код для двухуровневого корпуса и впоследствии мог бы глубже вложить много гнезд, но он был бы очень жестко запрограммирован и очень трудно понять. Кто-нибудь знает, как я мог бы сделать это рекурсивно или с другим шаблоном, который бы разрешил его?
Желаемая Выход Пример:
var root = {"name":"evt_seq","children":[{"name":"w","children":[{"name":"w","size":8},{"name":"k","size":1}]},{"name":"m","children":[{"name":"w","size":1}]}]}
Два уровня вложенности (Глядя на п уровень вложенности)
"use strict";
var data = [{"match": ["w", "w", "l", "w", "w", "w", "t", "w"]}, {"match": ["w", "k", "w", "A", "w", "w", "w", "w"]},
{"match": ["w", "w", "w", "w", "w", "w", "w", "w"]}, {"match": ["w", "w", "w", "w", "w", "w", "w", "w"]},
{"match": ["w", "w", "w", "w", "w", "w", "w", "w"]}, {"match": ["m", "w", "v", "v", "t", "m", "l", "m"]},
{"match": ["w", "w", "w", "l", "w", "w", "l", "l"]}, {"match": ["w", "w", "z", "w", "w", "m", "l", "w"]},
{"match": ["w", "w", "w", "w", "w", "w", "w", "w"]}, {"match": ["w", "w", "m", "w", "l", "w", "w", "w"]}
];
var root = {
"name": "evt_seq", children: []
};
// Get initial pattern
var groupedXs = _.groupBy(data, function (d) {
return d.match[0];
});
_.forEach(_.keys(groupedXs), function (d) {
let _x = groupedXs[d];
let _groupedXs = _.groupBy(_x, function (f) {
return f.match[1];
});
let _children = _.map(_.keys(_groupedXs), function (f) {
return {'name': f, 'size': _groupedXs[f].length}
});
root.children.push({"name": d, children: _children});
});
console.log(JSON.stringify(root));
Спасибо за помощь @Acey! – hotshotiguana