首页 > 解决方案 > 在 Node.js 中修改大量 json 文件/数组时的怪异

问题描述

我正在处理一个巨大的 json 文件(几乎 60 MB),我试图删除其中 volume = 0 的所有条目。数组的格式是

{
  "date": 1424373000,
  "high": 0.33,
  "low": 225,
  "open": 0.33,
  "close": 225,
  "volume": 0.999999,
  "quoteVolume": 0.00444444,
  "weightedAverage": 225
}

为此,我正在使用此代码。

fs.readFile('JSONFiles/poloniexBTCDataFeb19|2015-July2|2018.json', function read(err, data) {
  if (err) {
    throw err;
  }
  rawdata = JSON.parse(data);
  rawdata.forEach(function(val, index, array) {
    if (rawdata[index].volume == 0) {
      rawdata.splice(index, 1)
    }
  })
});

这样做的问题是它只删除了大约一半具有此特征的条目(60k/108k)。我解决这个问题的方法是使用 for 循环运行代码 9 次,这会将它们全部删除,但这会导致代码花费更长的时间,因为整个 json 文件有大约 360k 条目,它必须检查每个条目if 语句。我想知道是否有任何方法可以做到这一点,它实际上将它们全部删除,而不必以这种方式使用 for 循环?

编辑:我已经意识到我首先不需要这段代码,所以没关系,但感谢所有答案。我希望这对其他人遇到类似问题时有所帮助。

标签: javascriptarraysjsonnode.js

解决方案


您正在拼接记录,这可能需要时间。
而不是forEach,试试这个:

var filteredData = rawdata.filter(function (val) {
    return val.volume != 0
})

推荐阅读