无法使用 parseFloat 方法将字符串转换为数字
Cannot convert string into number with parseFloat method
我正在尝试创建一个关于作家的数据可视化。我创建了 csv 文件,然后由 d3.csv 函数处理。我还定义了另一个函数来处理一些值作为数字而不是字符串(具体来说,出版年份、页数和价格)。但是,当我将页面加载到浏览器中时,控制台仍然 returns 这些值作为字符串。你能帮我理解为什么以及如何解决它吗?谢谢!
<script type="text/javascript" src="d3.js">
var w = 500;
var h = 520;
var padding = 30;
var svg = d3.select("body").append("svg")
.attr("width", w)
.attr("height", h);
var rowConverter = function(d) {
return {
author: d.author,
title: d.title,
publisher: d.publisher,
year: parseFloat(d.year),
pages: parseFloat(d.pages),
price: parseFloat(d.price)
};
}
d3.csv("libri_nuovi.csv", rowConverter, function(data) {
console.log(data);
});
</script>
</body>
就像高积云在他的评论中指出的那样,您使用的是旧 csv api 和新版本的 d3。在旧的 API 中,您可以提供一个回调函数作为最后一个参数。由于 new API 使用 fetch,它 returns 现在是一个承诺。
对于版本 5.8.0,您可以像下面这样重写您的函数:
d3.csv(",", "libri_nuovi.csv", function(d) {
return {
author: d.author,
title: d.title,
publisher: d.publisher,
year: +d.year, // convert "year" column to number
pages: +d.pages,
price: +d.price,
};
}).then(function(data) {
console.log(data);
});
这是未经测试的代码,因为您没有 post 初始 json,但我认为它应该可以工作。
我正在尝试创建一个关于作家的数据可视化。我创建了 csv 文件,然后由 d3.csv 函数处理。我还定义了另一个函数来处理一些值作为数字而不是字符串(具体来说,出版年份、页数和价格)。但是,当我将页面加载到浏览器中时,控制台仍然 returns 这些值作为字符串。你能帮我理解为什么以及如何解决它吗?谢谢!
<script type="text/javascript" src="d3.js">
var w = 500;
var h = 520;
var padding = 30;
var svg = d3.select("body").append("svg")
.attr("width", w)
.attr("height", h);
var rowConverter = function(d) {
return {
author: d.author,
title: d.title,
publisher: d.publisher,
year: parseFloat(d.year),
pages: parseFloat(d.pages),
price: parseFloat(d.price)
};
}
d3.csv("libri_nuovi.csv", rowConverter, function(data) {
console.log(data);
});
</script>
</body>
就像高积云在他的评论中指出的那样,您使用的是旧 csv api 和新版本的 d3。在旧的 API 中,您可以提供一个回调函数作为最后一个参数。由于 new API 使用 fetch,它 returns 现在是一个承诺。
对于版本 5.8.0,您可以像下面这样重写您的函数:
d3.csv(",", "libri_nuovi.csv", function(d) {
return {
author: d.author,
title: d.title,
publisher: d.publisher,
year: +d.year, // convert "year" column to number
pages: +d.pages,
price: +d.price,
};
}).then(function(data) {
console.log(data);
});
这是未经测试的代码,因为您没有 post 初始 json,但我认为它应该可以工作。