基于先前值的 Javascript 过滤器

Gre*_*reg 3 javascript arrays filter ecmascript-6

我正在尝试重写 ES6 中的函数以对对象数组进行过滤。目前,代码循环遍历数组并将满足条件的数组成员复制到新数组,然后返回该新数组。该标准基于数组中的先前值。我想过滤掉对象的时间戳字段 < 4 分钟的所有数组项。

let final = [];
final.push(data[0]);

for (let i = 1, j = data.length; i < j; i++) {
    // if time difference is > 4 minutes add to our final array
    if (data[i].timestamp - data[i-1].timestamp > 240) {
        final.push(data[i]);
    }
}
return final;
Run Code Online (Sandbox Code Playgroud)

必须有更好的方法来做到这一点。我想过使用箭头函数,但我不知道迭代时如何访问前一个数组项对象的时间戳。

Ori*_*ori 7

Array.filter()方法将索引 ( i) 传递给回调函数,您可以使用它从数组中获取上一个值。为了同样获取第一项,我使用了条件,当为 0 时!i,该条件被求值。truei

const data = [{ timestamp: 1 }, { timestamp: 3 }, { timestamp: 250 }, { timestamp: 1000 }];

const final = data.filter((o, i) => 
  !i || (o.timestamp - data[i-1].timestamp > 240)
);

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