javascript - 如何使用 JavaScript 计算文本文件的每个后续行之间的差异?
问题描述
我有两个通过 XML 输出数据的提要箱(BinA、BinB)。使用 Node,我已经可以每 5 分钟成功解析一次相关数据并将其记录到一个文本文件中,参见代码段:
(timestamp),(BinA current weight),(BinB current weight)
2020-06-16 13:49,4874,5578
2020-06-16 13:54,4871,5574
2020-06-16 13:59,4870,5573
现在,我想每 5 分钟(每行之间)计算一次“使用情况”并将其保存到另一个数组中。从上面的行中连续减去下面的行 (4874-4871 = 3, 5578-5574 = 4,...) 应该得到这个数组:
(timestamp),(BinA minus line above),(BinB minus line above)
2020-06-16 13:54,3,4
2020-06-16 13:59,1,1
这很容易加载到charts.js 图表中,并且还可以生成过度使用和不足的警报。
到目前为止,我在试图提出这些数据的循环中一无所获,而且我无法在其他地方找到类似的问题/解决方案。
感兴趣的人的文件(xml、data1.txt、app.js:[ https://www.dropbox.com/sh/q6z7735bhy2k7fh/AACaai717meRVvzxj9LxVBLda?dl=0][1]
顺便说一句,这是我的第一个 Node/Javascript 项目!(灵感来自一个有问题的鸡舍)
解决方案
你可以做这样的事情。首先格式化您的数据,使其位于对象数组中,timeStamp
既是字符串binA
又binB
是数字。如果它们是字符串,则可以通过执行以下操作将 bin 值转换为数字Number('4874')
:
然后每五分钟调用一次函数并找到数组中的最后一项,并将一个新对象推入一个新数组,该数组通过将其与之前数组中的对象进行比较来派生:
const usage = [];
const data = [
{timeStamp: '2020-06-16 13:49', binA: 4874, binB: 5578},
{timeStamp: '2020-06-16 13:54', binA: 4871, binB: 5574},
{timeStamp: '2020-06-16 13:59', binA: 4870, binB: 5573},
];
const getUsage = data => {
const result = {
timeStamp: data[data.length - 1].timestamp,
binA: data[data.length - 1].binA - data[data.length - 2].binA,
binB: data[data.length - 1].binB - data[data.length - 2].binB,
}
usage.push(result);
}
// call getUsage(data); every five minutes
您应该与解析文本文件并行执行此操作,我不会尝试从文本文件中提取数据。
推荐阅读
- javascript - 在非反应函数中导入时如何测试redux状态
- sql - Oracle 连接到一个表或另一个
- ios - 如何重新排序 UITableView 的各个部分?
- hyperledger-fabric - 无法在 hyperledger fabric 1.1 上启动 composer 19.x
- python - Python 将 JSON 转换为 CSV 类型错误
- java - 工具栏重叠recyclerview
- html - 仅在 iOS(Safari 和 Chrome)上的 z-index 不起作用(内容出现在后面)
- go - golang sftp 此服务只允许 sftp 连接
- docker - 来自守护进程的错误响应:Get http s://registry-1.docker.io/v2/: proxyconnect tcp: tls: first record doesn't look like a TLS handshake
- java - KafkaConsumer 在轮询时进入无限等待状态