首页 > 解决方案 > 如何使用 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 项目!(灵感来自一个有问题的鸡舍)

标签: javascript

解决方案


你可以做这样的事情。首先格式化您的数据,使其位于对象数组中,timeStamp既是字符串binAbinB是数字。如果它们是字符串,则可以通过执行以下操作将 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

您应该与解析文本文件并行执行此操作,我不会尝试从文本文件中提取数据。


推荐阅读