我试图解决这个错误,因为2天后现在还不确定如何解决这个问题。我试图将数据添加到可视化
时出现此错误未捕获的TypeError:无法读取未定义的属性“长度”
这似乎与数据集有关。但无论我做什么,如果我在checkit函数之外的console.log数据集(见下文),我会得到这个错误,它返回undefined。
数据
[ {
"Continent":"Asia.Oceania",
"Country_Names":"Viet Nam",
"Total":142.9
},
{
"Continent":"Asia.Oceania",
"Country_Names":"Yemen",
"Total":20
},
{
"Continent":"Misc",
"Country_Names":"World marine bunkers",
"Total":602.2
},
{
"Continent":"Misc",
"Country_Names":"World aviation bunkers",
"Total":477.8
}
]
码
var svg_0 = d3.xml("drawing.svg", "image/svg+xml", function(xml) {
var importedNode = document.importNode(xml.documentElement, true);
d3.select("#viz").node().appendChild(importedNode);
var dataset;
function checkIt(data){
for (var i in data) {
var data_clean;
data_clean = data[i].Total
dataset = data_clean
console.log(dataset) //returns data
}
}
console.log(dataset)//returns undefined
d3.json("data.json", checkIt);
var svg = d3.select("#level_0")
.selectAll("path")
.data(dataset)
.enter()
});
答案 0 :(得分:2)
d3.json("data.json", checkIt);
是异步操作(check syntax here for example)。简而言之,这意味着在代码执行的某个时刻dataset
变量实际上是尚未定义。然后,它被定义,但为时已晚。
这意味着您需要确保在开始使用数据集时定义了数据集。例如,您可以将用法移动到checkIt回调,如下所示:
var dataset;
function checkIt(data){
var data_clean = []; //prepared variable for clear data
for (var i in data) {
data_clean.push(data[i].Total);
}
//move initialisation here, to be sure dataset is there
var svg = d3.select("#level_0")
.selectAll("path")
.data(data_clean);
}
//other code here...
d3.json("data.json", checkIt);
//other code here...