javascript - 在 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 循环?
编辑:我已经意识到我首先不需要这段代码,所以没关系,但感谢所有答案。我希望这对其他人遇到类似问题时有所帮助。
解决方案
您正在拼接记录,这可能需要时间。
而不是forEach
,试试这个:
var filteredData = rawdata.filter(function (val) {
return val.volume != 0
})
推荐阅读
- firebase - Firebase 和 Firestore - 将多个应用程序分组到一个项目中 - 身份验证如何工作?
- python - Python 3.6 相当于 md5 digest() 方法?
- performance - 最佳缓冲区大小以避免最近 i7 / i9 CPU 的缓存未命中
- javascript - 在使用函数之前验证函数的所有输入是否是最佳实践?
- c# - NuGet 更新后的程序集冲突
- vb.net - 如何使用复选框将 2 个表加入 DataGridView 并将 DGV 的状态保存回数据库
- python - 如何在Python中的嵌套字典中获取层次结构下的项目?
- python - jupyter-notebook:循环打印精细表格
- javascript - 未捕获的类型错误:无法在 HTMLButtonElement.ctrlAddItem 的 Object.addItem (app.js:41) 处读取未定义的属性“长度”
- service - Helm 部署与服务