Javascript 加载CSV文件时如何根据条件跳过行?
我正试图加载一个带有D3.js的csv文件,但在应用Javascript 加载CSV文件时如何根据条件跳过行?,javascript,d3.js,Javascript,D3.js,我正试图加载一个带有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) {
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
};
})
工作很好,因为:
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);
});
加载CSV时无法跳过行。因此,如果您的CSV有1MB,但只有几行符合标准,那么您仍然需要加载整个1MB。然而,尽管您的问题中有“跳过加载”,但在我看来,您只是想过滤解析的CSV。如果这是正确的,您可以使用常规筛选器,或者,正如您在问题中尝试做的那样,您可以使用行转换函数
在这种情况下,只需检查年份:如果符合标准,则返回整个对象,否则返回null
。检查这个简单的演示:
const csv=`名称,年份
傅,1300
巴,1800,
巴兹,2200`;
const data=d3.csvParse(csv,d=>+d.year<1900?d:null);
console.log(数据)
Gerardo Furtado:[“加载CSV时无法跳过行。因此,如果您的CSV有1MB,但只有几行符合标准,您仍然需要加载整个1MB”]-有趣的评论。我使用下面的代码应用“if-else”语句。对象的大小根据标准而变化。有没有提到你的陈述?key(数据集)。length@GenciYmeriXHR或Fetch无法加载文件的一部分。我认为问题是加载文件的哪一部分首先可以分配给DOM对象。因此可以进行过滤,而不是将文件的整个数据分配给对象,然后在第二个循环中重新进行过滤。我用Object.keys(dataSet.length)做了一些测试,这似乎支持这种情况——可以过滤信息,而无需首先分配所有数据。根据文件本身,很可能已完全加载。
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);
});