更改d3版本後運行代碼發現提示以上錯誤,然後跳轉到sankey.js中查找源碼
通過斷點調試,發現此處的source和target的索引都爲-1,繼續向上追尋
發現此處所有的name都是攜帶$符號的,繼續查找自己寫的代碼
此處發現結果是攜帶符號的,所以可以確定代碼的問題出現在
graph.nodes = d3.keys(d3.nest()
.key(function (d) {
console.log(d)
return d.name;
})
.map(graph.nodes));
通過查詢d3文檔,發現d3.keys的作用是獲取對象的key,然後合併進一個數組,而d3.nest的作用是將數據整理成一個蜂巢結構,該方法賦值在v5中有三個,map、object、entries,在v3情況下使用map返回的結果是正確的,但是在v5中,使用map返回的結果是
{
$a: 'abs',
$b: 'sdff'
}
這樣子的,所以最後會造成所有結果都攜帶美元符號。當使用entries方法時,返回的結構是
{
1: 'a',
2: 'b'
}
這樣子的,所以最後獲取keys數組是[1,2]。當使用object方法時,會返回
{
a: 'asfgs',
b: 'dfs'
}
這樣使用keys方法就能獲取到正確的數組
主要思路來源:
https://www.oxxostudio.tw/articles/201412/svg-d3-06-data-nest.html