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

时间:2017-09-30 01:32:40

标签: 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]));
}

2 个答案:

答案 0 :(得分:1)

由于OP不再需要我的代码了,我在这里发布它以删除downvote和其他任何东西:)

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. 比较每个连续值并返回差异。
  5. 好的,我走到这一步,我的儿子需要我。我尽快完成代码,但你可能会打败我,希望上面的说明有所帮助。

答案 1 :(得分:0)

原来我的代码没有错。只是我对整个过程的看法。

array = [8127,13166]

是我最初得到的。有了这个,我在我的另一个数组上使用indexOf最终得到我的数组:

                var another_test_arr = [];
                for(var v = 0; v < array.length ; v++) {
                var find = foreach_arr.indexOf(attempt_indices[v]);
                another_test_arr.push(array[v], newdata.indexOf(foreach_arr[find + 1]));
            }  

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