我有一个像这样的对象数组,其中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)
这是可能的阵列为以"启动"项,在这种情况下的差将是结束之间time和Date.now().
然而,已经确保阵列按时间排序,并且"开始"和"停止"条目必须正确地交替.
我怎么能这样做?
您可以检查项目,如果开始,则减去该值,否则添加该值.
对于初始值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)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |