如何仅将最终计数打印到控制台?

How can I print only the final count onto the console?

我有一个包含姓名和年龄的 csv 文件。 我想统计 30 岁以下的人数。

我试过下面的代码。

<script src='https://d3js.org/d3.v7.min.js'></script>
<script>
let thiscsv = 'my csv link here';
let count=0;
d3.csv(thiscsv, function(data) {
 
 if(data.age>30)
 {
   count++
 }

console.log(count);
});
</script>

它会检查每一行并在其中打印控制台,每次添加 1 个计数,直到 csv 文件结束为止。 我只想将最终计数直接打印到控制台上。我该怎么做?

仔细阅读您之前收到的问题(我建议您像我一样给它投赞成票):回答者首先说的是您需要 then()。这是 D3 v7,它不使用像 D3 v4 或更少的回调。您现在执行的方式是所谓的 行函数 将为每个已解析的行 运行,正如预期的那样。

这是你应该做的,再次注意then():

<script src='https://d3js.org/d3.v7.min.js'></script>
<script>
  let thisCsv = URL.createObjectURL(new Blob([`name,age
  foo,12
  bar,34
  baz,63
  foobar,17,
  barbar,43,
  barbaz,39`]));
  
  let count = 0;
  
  d3.csv(thisCsv, d3.autoType).then(data => {

    data.forEach(d => {
      if (d.age > 30) count++
    });

    console.log(count);
  });
</script>

另外,请注意 d3.autoType:如果没有它,您的 CSV 数字将是 字符串 ,而不是数字。

如果您只想统计 30 岁以上的人数:

const process = data =>  {
  const ages = data.map(({Age}) => +Age) // make sure it is a number
  .filter(num => num > 30)
  .length

  console.log("Total ppl with age above 30:",ages)
}

// uncomment when you want to read a file

// let mycsv = 'example.csv';
// d3.csv(mycsv)
//.then(function(data) {
  process(data)
//})
<script src='https://d3js.org/d3.v7.min.js'></script>
<script>
  const data = d3.csvParse(`PassengerId,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
111,1,"Ken, Mr. James",male,34.5,0,0,330911,7.8292,,A
112,2,"Will, Mrs. James",female,47,1,0,363272,7,,B`);
</script>