我得到了许多不同的字符模式的数组,请参见下面的data
,并且我试图将数据嵌套到分层JSON形式中,以插入到森伯斯特可视化中。每个模式由n
个字符组成,尽管下面的字符是8个字符。讨论所需的结果:
在级别0,找到有多少个唯一的字符。答:['w','m']。
取第一个键“ w”并找到第1级的所有唯一字符,然后转到第2级,依此类推,直到到达模式的末尾,然后我们在末尾计算该唯一模式的大小。
重复#2作为第二个键“ m”
将结果插入到children
的root
属性中。
我能够为两级情况构造代码,并且随后可以进行很多嵌套以使其更深入,但是它将很难编码并且非常难以理解。有谁知道我可以递归地执行此操作的方法,还是可以用另一种方式来解决此问题?
所需的输出样本:
var root = {"name":"evt_seq","children":[{"name":"w","children":[{"name":"w","size":8},{"name":"k","size":1}]},{"name":"m","children":[{"name":"w","size":1}]}]}
两层嵌套(寻找n层嵌套)
"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));
最佳答案
绝对可以使用递归算法来解决此问题。由于语法似乎不太重要,所以我只给出简短的伪代码:
function subTree(inputs) {
var children = []
var leadingLetters = //map first letter from each array, remove duplicates
for leadingLetter in leadingLetters {
var matchingInputs = //filter inputs that match the first letter
var reducedInputs = //copy of matchingInputs, but the first (matching) element is removed from each array
children.push(subTree(reducedInputs))
}
return children
}
var root = subTree(data);
我没有将空子级数组当作null来处理,因为我不太确定到达字符串末尾时会发生什么。无论哪种方式,这都可以助您一臂之力。 (PS希望这不是做家庭作业!= X)
关于javascript - 从Char序列到分层JSON-d3.sunburst,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36507417/