如何计算条目列表之间的总时间?

Emp*_*ger 1 javascript

我有一个像这样的对象数组,其中action总是"开始"或"停止",这time是一个UNIX毫秒时间戳(在这里简化).

[
  {
    action: "start",
    time: 100,
  },
  {
    action: "stop",
    time: 150
  },
  {
    action: "start",
    time: 250
  },
  {
    action: "stop",
    time: 350
  }
]
Run Code Online (Sandbox Code Playgroud)

我需要找出每个"开始"和"停止"之间经过的总时间.在这种情况下,正确的答案是150,因为

(150 - 100) + (350 - 250) = 150
Run Code Online (Sandbox Code Playgroud)

这是可能的阵列为以"启动"项,在这种情况下的差将是结束之间timeDate.now().

然而,已经确保阵列按时间排序,并且"开始"和"停止"条目必须正确地交替.

我怎么能这样做?

Nin*_*olz 5

您可以检查项目,如果开始,则减去该值,否则添加该值.

对于初始值Array#reduce,您可以检查最后一个元素并使用实际的epoc时间作为起始值,否则0.

var data = [{ action: "start", time: 100 }, { action: "stop", time: 150 }, { action: "start", time: 250 }, { action: "stop", time: 350 }, { action: "start", time: 400 }],
    end = 450, // should be Date.now(),
    sum = data.reduce(function (r, a) {
        return r + (a.action === 'start' ? -a.time : a.time);
    }, data[data.length - 1].action === 'start' ? end : 0);

console.log(sum);
Run Code Online (Sandbox Code Playgroud)