为什么我的d3映射函数返回一个未定义的源属性
Why is my d3 map function returning an undefined source attribute?
我是d3js的新手,我在尝试将csv文件映射到force布局的链接时遇到了一些问题。
这是我的CSV文件
node,edges,centrality_degree
1,"[(1, 2), (1, 3), (1, 4), (1, 5)]",1.0
2,"[(2, 1), (2, 3), (2, 4), (2, 5)]",1.0
3,"[(3, 1), (3, 2), (3, 4), (3, 5)]",1.0
4,"[(4, 1), (4, 2), (4, 3), (4, 5)]",1.0
5,"[(5, 1), (5, 2), (5, 3), (5, 4)]",1.0
我想将边缘值设置为d3.layout.force()的links属性,但是在映射值时,我得到一个错误:
Uncaught TypeError: Cannot read property 'weight' of undefined
我也不知道返回一个包含一堆对象的数组是否正确,这就是我在控制台上得到的。5个数组,每个数组有4个对象,每个对象都有其源和目标属性。所有属性都是正确的,除了5数组。我得到了它的第一个源值的未定义值。应该是5。
下面是我的代码:var force = d3.layout.force()
.size([w, h]);
d3.csv("{{ g }}", function(d) {
var nodes = d3.values(d.map( function(d){ return +d.node; } ));
var links_list = d.map( function(d) {
list_array = JSON.parse(d.edges.replace(/'(/g,"[").replace(/')/g,"]"));
var i, len = list_array.length;
links = [];
for (i=0; i<len; i++) {
links.push({source: list_array[i][0] ,target: list_array[i][1] });
}
console.log(links);
#console result:
#[Object, Object, Object, Object]
#[Object, Object, Object, Object]
#[Object, Object, Object, Object]
#[Object, Object, Object, Object]
#expanding one array:
#0: Object
#1: Object
#2: Object
#3: Object
#[Object, Object, Object, Object]
#expanding the array[5][0] object:
#0: Object
#source: undefined
#target: 2
#__proto__: Object
});
force
.nodes(nodes)
.links(links)
.start();
...
});
我做错了什么,为什么我得到这个错误?
感谢你的帮助。
源属性和目标属性的值应该指定为索引到nodes数组;这些将被引用所取代调用后强制启动。
注意数组的下标从0开始,而不是从1开始。但在csv的数据中,你有(5, 1), (5, 2), (5, 3), (5, 4)
这样的链接你的节点数组只有5个元素;最后一个元素的索引是4。您应该将这些数字减少为1以表示实际的节点。
:
var nodes = [{ name: "A", id: 1},{ name: "B", id: 2}];
Force layout期望链接数组如下所示。
var links = [{ source:0, target: 1 }];
希望你有问题。您必须按照下面所示的操作来获得实际的索引。
for (i=0; i<len; i++) {
links.push({source: list_array[i][0]-1 ,target: list_array[i][1]-1 });
}
相关文章:
- 变量转换为另一个“未定义”的变量
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 所以这是说我的法定对象中有一个未定义的变量
- 为什么在这个数组的末尾会有一个未定义的
- 为什么我得到一个未定义的回报
- Router.use()需要中间件函数,但得到了一个未定义的函数
- 使用jQuery'在数组中循环;s中的每一个都会在生成字符串时在开头产生一个未定义的值
- 如果定义了值,为什么会得到一个未定义的值?使用 eval()
- 无论如何,在Visual Studio智能感知中定义一个未定义的对象
- 角度过滤器分组依据过滤器返回一个“未定义”字段
- 如果我在 Filter() 函数中使用索引,我会得到一个未定义的引用错误吗?
- 另一个未定义的JavaScript问题
- 我得到一个未定义而不是文件名
- 为什么我的 push() 方法不断在我的数组中插入一个“未定义”的元素
- addEventListener 使用 for 循环给了我一个未定义的结果
- Promise.all 在完成之前返回一个未定义和解析的数组
- Angular JS给出了一个未定义的函数错误
- 我得到一个未定义的索引
- JS说我有一个未定义的对象.真的需要一些帮助来解决这个问题吗
- Ajax 调用给了我一个未定义 - 未定义的错误