d3.js和多维数组
d3.js and multidimensional array
我有一个多维数组,其中的对象看起来像这个
var nest = [
{key: 'VLan422', values:[[{Class:"VMWARE VIRTUAL PLATFORM",name: "pdb02"},{"Ip Adress": 'IP_1',ip4: '1.3242.3'},{name: 'VLan422'}],
[{Class: "VMWARE VIRTUAL PLATFORM",name: "pxc07"},{"Ip Adress": 'IP_1',ip4: '21.35666.1'},{name: 'VLan422'}]]
},
{key: 'VLan33', values:[[{Class: "VMWARE VIRTUAL PLATFORM",name: "pew09"},{"Ip Adress": 'IP_1',ip4: '5.24232.6'},{name: 'VLan33'}],
[{Class: "VMWARE VIRTUAL PLATFORM",name: "plk15"},{"Ip Adress": 'IP_1',ip4: '2.77888.9'},{name: 'VLan33'}]]}
];
我正在尝试创建
- 对于每个
key
,svg对象,在这种情况下,对于Vlan422
和Vlan33
- 对于每个值块,一个图像svg,它应该在相应的svg键对象中
我的问题是,d3为我在两个svg对象中的两个键的每个值块创建一个图像,而不是只为对应键的每一个值块创建图像。
var div = d3.select("body")
.append("div")
.attr("width", "100%")
.attr("height", "700");
var svg = div.selectAll("svg")
.data(nest)
.enter()
.append("svg")
.attr("width", "100%")
.attr("height", "1500")
.style("float", "left");
for(i=0;i<nest.length;i++){
test = nest[i].values;
var imgs = svg.selectAll("image")
.data(test);
imgs
.enter()
.append("svg:image")
.attr("xlink:href", "http://www.clker.com/cliparts/1/4/5/a/1331068897296558865Sitting%20Racoon.svg")
.attr("x", "40")
.attr("y", function(d,i){console.log(d);console.log(i);var x = (i + 1) * 50; return (""+x+"");})
.attr("width", "100")
.attr("height", "100");
imgs
.exit()
.remove();
}
这是我想要得到的结果
链接
我想要两个对象key一个svg容器,在它们内部,每个数组一个图像。我的代码创建了这两个svg容器,但它没有只创建其中相应的键的图像,而是显示了每个数组。
例如,在我的第一个svg中,我得到了四个图像,而不是两个
- pdb02、pxc07、pew09、plk15
在我的第二个svg中,我得到了相同的结果,而不是
- 第09页,第15页
我已经通过使用g元素解决了我的问题
var cmargin = 30; var cheight = 60; var cwidth = 40; var svg=d3.select("body").append("svg") .attr("width", "100%") .attr("height", "100%"); var container=svg.selectAll("g") .data(nest) .enter() .append("g") .attr("transform",function(d,i) {return "translate("+(100*i)+",0)";}); container .append("rect") .attr("x",cmargin) .attr("y",cmargin) .attr("width",cwidth-2*cmargin) .attr("height",cheight-2*cmargin) container .append("text") .attr("y",cheight+10) .attr("x",cmargin) .text(function(d) {return d.key;}); container.selectAll("image") .data(function(d) {return d.values}) .enter() .append("svg:image") .attr("xlink:href", "http://www.clker.com/cliparts/1/4/5/a/1331068897296558865Sitting%20Racoon.svg") .attr("x", "40") .attr("y", function(d,i){console.log(d);console.log(i);var x = (i + 1) * 50; return (""+x+"");}) .attr("width", "100") .attr("height", "100");
要获得数组的每个值作为svg对象,需要获得数组的各个值并将其添加到svg.data(test)中。您可以获得如下测试值。
for(i=0;i<nest.length;i++){
for(j=0;j<nest[i].values.length;j++){
for(k=0;k<nest[0].values[0].length;k++){
test = nest[i].values[j][k].Number;//will get each object value.
console.log(test);
var imgs = svg.selectAll("image")
.data(test);
rest of the code here......
}
}
}
相关文章:
- 在数组JS中查找三个重复项
- 比较二维数组js
- 从数组(JS)中的对象调用函数
- 检查对象是否已被推入数组 Js
- 将CSV文件转换为JSON数组JS
- 解析多维数组JS的数组并记录索引
- 如何遍历直接传递到灰尘的数组.js
- 如何使用 D3 选择 JSON 数组.js 使用 .算子
- JavaScript 变量中的 PHP 数组 - JS 元素
- 将数据复制到 JavaScript D3 中的数组.js然后绘制散点图
- 基于数组JS中的值创建按钮
- 创建数组JS
- 按频率排序子字符串数组-JS
- 将数组js变量传递给php
- 使用不带嵌套循环的数组过滤对象数组js
- 创建封装数组JS
- 创建多dim数组(JS)
- 创建for循环对象并将它们压入数组js中
- 将数组JS中的所有项相乘
- 如何从二维数组(JS)中获取网格的坐标