javascript - 比较数组的当前元素和下一个元素并返回时间差

标签 javascript arrays momentjs

这是我的数组。它的长度约为 9000。这是它的一小部分的样子:

foreach_arr = ["21:07:01.535", "21:07:01.535", "21:07:26.113"]

有几次时间差异大于一分钟,这就是我想要捕获这些时间的时候。然后使用这些时间从另一个数组中获取某些索引。即“数组” 我还使用 moment.js 进行时间解析。

预期结果:array = [8127, 9375, 13166, 14182]

实际结果:array = [8127, 13166]

似乎在这里找不到问题,当我应该得到 4 个结果时,我却得到了 2 个结果。 如果需要整个数组来进行故障排除,我会尽可能添加它。

var xx = foreach_arr.length - 1;
for(var z = 0; z < xx; z++) {

    var current_row = foreach_arr[z];
    var next_row = foreach_arr[z + 1];

    var msElapsedTime = moment(next_row,"HH:mm:ss.SSS").diff(moment(current_row, "HH:mm:ss.SSS")) / 1000;

    if(msElapsedTime > 60) {
        attempt_indices.push(foreach_arr[z]);
    }

}

for(var x = 0; x < attempt_indices.length; x++) {
    array.push(newdata.indexOf(attempt_indices[x]));
}

最佳答案

由于 OP 不再真正需要我的代码,因此我将其发布到此处以删除反对票和其他任何内容:)

const foreach_arr = ["21:07:01.535", "21:07:01.535", "21:07:26.113", '22:01:01.000'];
let processedForeach_arr = [];
let gtOneMinuteDiff = [];

foreach_arr.forEach((elem1, index1) => {
  // elem1.split(':') turns foreach_arr[0] into ['21', '07', '01.535']
  const splitElementArray = elem1.split(':');
  let timeInMs = 0;
  // this changes ['21', '07', '01.535'] into [75600000, 420000, 1535]
  splitElementArray.forEach((elem2, index2) => {
    if (index2 === 0) { // elem2 is hours. 3.6M ms per hour.
      timeInMs += parseFloat(elem2) * 60 * 60 * 1000;
    } else if (index2 === 1) { // elem2 is minutes. 60K ms per minute.
      timeInMs += parseFloat(elem2) * 60 * 1000;
    } else if (index2 === 2) { // elem2 is seconds. 1K ms per second.
      timeInMs += parseFloat(elem2) * 1000;
    } else {
      throw `Expected array element formatted like HH:MM:SS.ms. Error on 
      element ${elem1}.`;
    }
  });
  processedForeach_arr.push(timeInMs);
  let timeDiff = processedForeach_arr[index1 - 1] - processedForeach_arr[index1];
  if (Math.abs(timeDiff) > 60000) {
    gtOneMinuteDiff.push(timeDiff);
  }
});

要获取 foreach_arr[n] 和 foreach_arr[n+1] 之间的毫秒差异,此代码将

  1. 将 foreach_arr 的每个元素拆分为 3 个字符串(时、分、秒 + 毫秒)
  2. 对每个值运行 parseFloat 将它们转换为数字
  3. 将所有数字转换为毫秒并将它们相加
  4. 比较每个连续值并返回差异。

好的,我已经走到这一步了,我的儿子需要我。我会尽快完成代码,但你可能会比我先完成,希望上面的说明有所帮助。

关于javascript - 比较数组的当前元素和下一个元素并返回时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498752/

相关文章:

javascript - PHP/Javascript 无法正确上下移动文件夹

javascript - 为什么 PHP 在浮点运算方面比 Javascript 更好?

c - 在冒泡排序中得到错误的输出

javascript - Moment JS比较小时和分钟

javascript - 输入文件选择不会一致触发更改事件

arrays - 创建 UArray 的自定义实例

arrays - MATLAB 中的元胞数组

javascript - moment JS - 比较本地时间的正确方法

javascript - 无法在 Highcharts 图表中设置时区

javascript - 如何为对象列表显示多个日历