d3製作桑基圖,由v3切換到v5

在這裏插入圖片描述
更改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

https://www.geeksforgeeks.org/d3-js-d3-keys-function

http://learnjsdata.com/group_data.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章