将Clusterfck数组转换为JavaScript InfoVis Toolkit json分层
目前,我正在使用javascript库执行数据分组。此库生成以下格式的数组:将Clusterfck数组转换为JavaScript InfoVis Toolkit json分层,javascript,d3.js,cluster-computing,hierarchical-clustering,infovis,Javascript,D3.js,Cluster Computing,Hierarchical Clustering,Infovis,目前,我正在使用javascript库执行数据分组。此库生成以下格式的数组: [ {"canonical":[20,120,102], "size":1 }, {"canonical":[250,255,253], "left":{ "canonical":[250,255,253], "size":1 }, "right":{ "canonical":[255,255,240], "size":1 }
[
{"canonical":[20,120,102],
"size":1
},
{"canonical":[250,255,253],
"left":{
"canonical":[250,255,253],
"size":1
},
"right":{
"canonical":[255,255,240],
"size":1
},
"size":2
},
{"canonical":[100,54,300],
"size":1
}
]
但是用于数据可视化的javascript库如何使用D3.js和JSON结构,如下所示:
{
"canonical":"Pai",
"children":[
{"canonical":[20,120,102], "size":1},
{
"canonical":[250,255,253],
"children": [
{"canonical":[250,255,253], "size":1},
{"canonical":[255,255,240], "size":1}
],
"size":2
},
{
"canonical":[100,54,300],
"size":1
}
]
}
我想使用JavaScript或PHP转换这些结构。有人能帮我吗?如果您只想在这些结构之间进行转换,这非常简单。参见工作小提琴: 这使用了ECMAScript 1.5的两个特性(
Array.isArray
、forEach
、和map
),但如果您使用的是d3,那么您的目标可能是支持这一特性的浏览器
function convert(input, rootName) {
// top level
if (Array.isArray(input)) {
return {
"canonical": rootName,
"children": input.map(convert)
};
}
// node
else {
['left', 'right'].forEach(function(side) {
if (input[side]) {
input.children = input.children || [];
input.children.push(convert(input[side]));
delete input[side];
}
});
return input;
}
}