【问题标题】:Nodejs parsing min and max values returning wrong valuesNodejs解析最小值和最大值返回错误值
【发布时间】:2015-12-01 17:46:45
【问题描述】:

我正在使用csv-parser 来解析我拥有的 csv 文件。然后在解析每一行时,我会检查该行中的每个值以获取最小值和最大值。

我的问题是我的最大值在 COL 和 ROW 列中一直显示为 99。当他们的最大行数约为 200,列数约为 300 时。我不确定那里发生了什么,据我所知我的方法应该有效。

这是我的相关代码:

var mins = {}
var maxs = {}
function loadCSV(finishedCallback) {
    console.log("Loading csv...");
    fs.createReadStream(__dirname + '/data.csv')
    .pipe(stream)
    .on('data', function (data) {
        for (var k in data) {
              if (data.hasOwnProperty(k)) {
                  if (mins[k] == undefined)
                      mins[k] = data[k];
                  if (maxs[k] == undefined)
                      maxs[k] = data[k];

                  if (mins[k] > data[k])
                      mins[k] = data[k];
                  if (maxs[k] < data[k])
                      maxs[k] = data[k];

              }
          }
      }).on('finish', function () {
          console.log("Finished reading csv!")
          finishedCallback();
          console.log("Maxs: " + JSON.stringify(maxs));
          console.log("Mins: " + JSON.stringify(mins));
          return true
      })
}

这是我 CSV 的前几行:(我知道重复的 x 和 y 字段,我最终不会使用 then)

X,Y,X,Y,ROW,COL,EMH,EMV,ASP,DEM,SLOPE
495118.8125,4469900.5,495118.80000,4469901.00000,0,79,15.56310,8.11320,285.65760,318.85077,0.12900
495120.8125,4469900.5,495120.80000,4469901.00000,0,80,15.64225,8.12110,286.47190,318.87570,0.13107
495122.8125,4469900.5,495122.80000,4469901.00000,0,81,15.76020,8.10590,287.70340,318.91686,0.13890

我有一种感觉,我可能很愚蠢并且遗漏了一些明显的东西:P

【问题讨论】:

    标签: node.js csv


    【解决方案1】:

    您正在比较字符串而不是数字:

    $ node
    > '99' > '300'
    true
    

    所以在进行任何比较之前,先将data[k] 转换为数字:

    var value = Number(data[k]);
    

    【讨论】:

    • 这是我第三次这样做,假设库使用数字而不是字符串。我真的需要开始检查:P
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2019-06-24
    相关资源
    最近更新 更多