2017-08-31 23 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()的方法。

相關問題