我试图用D3.js加载csv文件,但我想根据一些标准跳过一些行,当我应用filter()
时,它说没有这样的功能。如有任何帮助,不胜感激。
var dataSet = d3.csv("mydata.csv", function(d)
{
// trying to skip the line based on the below condition
if (d.year < 1900)
{
//skip loading, not sure what should I return
return false;
}
else
return {
name: d.name,
year: d.year,
average_rating: d.average_rating,
user_rated: d.user_rated
};
})
data.csv:
name,year,average_rating,users_rated
King of Tokyo,2011,7.23048,48611
Love Letter,2012,7.25253,47014
加载CSV时无法跳过行。因此,如果您的CSV有1MB,但只有几行符合标准,您仍然需要加载整个1MB。然而,尽管你在你的问题中有"跳过加载">,在我看来,你只是想过滤解析的CSV。如果这是正确的,您可以使用常规过滤器,或者,正如您在问题中尝试做的那样,您可以使用行转换函数。
在这种情况下,只需检查年份:如果符合条件,则返回整个对象,否则返回null
。检查这个简单的演示:
const csv = `name,year
foo,1300
bar,1800,
baz,2200`;
const data = d3.csvParse(csv, d => +d.year < 1900 ? d : null);
console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
请注意,数字被解析为字符串,因此+d.year
.
正常运行
const dataSet = d3.csv("mydata.csv", function(d)
{
// skips all the lines where d.year >= 1900 condition
if (d.year >= 1900){
return {
name: d.name,
year: d.year,
average_rating: d.average_rating,
user_rated: d.user_rated
}
};
}).then(function(d){
//some more data manipulation
// d.field = +d.field;
})
.catch(function(error)
{
console.log(error);
});