Javascript(d3.js)-连续语句上的不同控制台日志输出
我似乎无法弄清这个问题的真相。我有以下Javascript代码:Javascript(d3.js)-连续语句上的不同控制台日志输出,javascript,d3.js,Javascript,D3.js,我似乎无法弄清这个问题的真相。我有以下Javascript代码: for(var i=0; i<links1.length; ++i) { console.log(links1[i]); } console.log(links1); 当console.loglinks1行生成: [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object,
for(var i=0; i<links1.length; ++i) {
console.log(links1[i]);
}
console.log(links1);
当console.loglinks1行生成:
[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
0: Object
source: Object
target: Object
__proto__: Object
1: Object
source: undefined
target: Object
__proto__: Object
2: Object
source: 32
target: 31
__proto__: Object
3: Object
source: 16
target: 104
__proto__: Object
4: Object
source: 104
target: 32
__proto__: Object
...
为什么前两个元素的值不同
后台没有AJAX调用,调用的d3.js方法是parseRows,不应该是异步的
如果相关,代码的上下文是:
function draw_graph(nodes1, links1) {
var width = 500;
var height = 500;
var force = d3.layout.force()
.charge(-120)
.linkDistance(30)
.size([width, height]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
console.log('tu');
for(var i=0; i<links1.length; ++i) {
console.log(links1[i]);
}
console.log(links1);
console.log(nodes1);
force
.nodes(nodes1)
.links(links1)
.start();
...
}
d3.text("test1.txt", function(text) {
var nodes = [];
rows = d3.dsv(" ", "text/plain").parseRows(text);
for(var i=0; i<rows.length; ++i) {
newEl = {name:+rows[i][0], value:+rows[i][0]};
nodes.push(newEl);
}
d3.text("test2.txt", function(text) {
var links = [];
rows = d3.dsv(" ", "text/plain").parseRows(text);
for(var i=0; i<rows.length; ++i) {
newEl = {source:+(rows[i][0]), target:+(rows[i][1])};
links.push(newEl);
}
draw_graph(nodes, links);
});
});
与:
如果有人知道我做错了什么,请告诉我
谢谢 你用什么浏览器?如果使用Chrome并在控制台中展开console.loglinks1的输出以查看其内容,您将看到对象的当前状态,而不是调用console.loglinks1时对象的状态。这就是为什么它与console.loglinks1[i];不同的原因;。这将表明在您的循环修改links1.Ahhh之后执行的一些代码,这就解决了一些问题。谢谢你,好心的先生!
function draw_graph(nodes1, links1) {
var width = 500;
var height = 500;
var force = d3.layout.force()
.charge(-120)
.linkDistance(30)
.size([width, height]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
console.log('tu');
for(var i=0; i<links1.length; ++i) {
console.log(links1[i]);
}
console.log(links1);
console.log(nodes1);
force
.nodes(nodes1)
.links(links1)
.start();
...
}
d3.text("test1.txt", function(text) {
var nodes = [];
rows = d3.dsv(" ", "text/plain").parseRows(text);
for(var i=0; i<rows.length; ++i) {
newEl = {name:+rows[i][0], value:+rows[i][0]};
nodes.push(newEl);
}
d3.text("test2.txt", function(text) {
var links = [];
rows = d3.dsv(" ", "text/plain").parseRows(text);
for(var i=0; i<rows.length; ++i) {
newEl = {source:+(rows[i][0]), target:+(rows[i][1])};
links.push(newEl);
}
draw_graph(nodes, links);
});
});
force
.nodes(nodes1)
.links(links1)
.start();
Uncaught TypeError: Cannot read property 'weight' of undefined d3.js:6244
force.start d3.js:6244
draw_graph test.php:58
(anonymous function) test.php:113
(anonymous function) d3.js:1931
(anonymous function) d3.js:1916
event d3.js:434
respond