Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载CSV文件时如何根据条件跳过行?_Javascript_D3.js - Fatal编程技术网

Javascript 加载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) {

我正试图加载一个带有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
       };
     })
工作很好,因为:

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);
         });