2017-08-31 113 views
0

我一直在努力解决这个问题。 我新来的Javascript,所以有些东西我还是不明白。 我创建了函数linkBuilder从JSON文件中提取一些数据。我测试了parseLine它工作。将函数分配给var不起作用。价值仍然'未定义'

links=[]; 
let linkBuilder = function(){ 
    d3.text('prova2utenti.json',function(err,data){ 
    if (err) throw err; 
    var elements = data.split('\n'); 
    for (var i=0, l=elements.length; i<l; i++){ 
    links.concat(parseLine(elements[i])); 
    console.log(links); 
    } 
    }); 
} 

问题是,当我尝试使用此代码创建我的图表中的联系:在我的网页上

links.forEach(function(link) { 
    link.source = nodes[link.source] || (nodes[link.source] = {name: link.source}); 
    link.target = nodes[link.target] || (nodes[link.target] = {name: link.target}); 
}); 

没有显示,这就像VAR 链接从不初始化。我想这是因为吊装,但我不知道,无论如何我不知道如何解决。 任何帮助真的很感激。

+1

何时以及如何调用'linkBuilder'函数? –

+0

“像var链接永远不会初始化_”这不是,你认为'forEach'多少次会循环一个空数组.. ..? +'link.source =节点[link.source] || (节点[link.source] = {name:link.source});'不会做你认为它做的事,而是一个语法错误。 – Teemu

+0

除了你没有调用'linkBuilder'这个事实,这个'forEach'在哪里呢?在'd3.text'里面还是外面?提示:它**不能**在外面。 –

回答

0

好吧,我能解决这个问题。像@GerardoFurtado建议的那样,我把所有的逻辑绘制在专用的函数中。然后只需在d3.text内调用该函数即可完成工作。 我有另一个问题concat()函数。它创建一个新阵列每次被调用,而不是添加到相同的。我解决了使用push()的方法。

相关问题