基于上一个值的Javascript过滤器

基于上一个值的Javascript过滤器,javascript,arrays,filter,ecmascript-6,Javascript,Arrays,Filter,Ecmascript 6,我正在尝试重写ES6中的一个函数,以便在对象数组上使用过滤。当前,代码在数组中循环,并将满足条件的数组成员复制到新数组中,然后返回该数组。该条件基于数组中的上一个值。我想过滤掉对象的timestamp字段小于4分钟的所有数组项 let final = []; final.push(data[0]); for (let i = 1, j = data.length; i < j; i++) { // if time difference is > 4 minutes add

我正在尝试重写ES6中的一个函数,以便在对象数组上使用过滤。当前,代码在数组中循环,并将满足条件的数组成员复制到新数组中,然后返回该数组。该条件基于数组中的上一个值。我想过滤掉对象的timestamp字段小于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;
必须有更好的方法来做到这一点。我曾想过使用arrow函数,但我不知道在迭代时如何访问前一个数组项对象的时间戳

let prevTs = -Infinity;
const result = data.filter((d) => {
  const localResult = (d.timestamp - prevTs) > 240;
  prevTs = d.timestamp;
  return localResult;
});
或者,您可以在筛选器回调中使用索引arg:

data.filter((d, i) => {
  if (!i) {
    return true;
  }
  return (d.timestamp - data[i - 1].timestamp) > 240
});
或者,您可以在筛选器回调中使用索引arg:

data.filter((d, i) => {
  if (!i) {
    return true;
  }
  return (d.timestamp - data[i - 1].timestamp) > 240
});
该方法也可以使用索引i。为了同样获得第一项,我使用条件!i、 当i为0时,其计算结果为true

const data=[{timestamp:1},{timestamp:3},{timestamp:250},{timestamp:1000}]; const final=data.filtero,i=> !i | | o.时间戳-数据[i-1]。时间戳>240 ; console.logfinal 该方法也可以使用索引i。为了同样获得第一项,我使用条件!i、 当i为0时,其计算结果为true

const data=[{timestamp:1},{timestamp:3},{timestamp:250},{timestamp:1000}]; const final=data.filtero,i=> !i | | o.时间戳-数据[i-1]。时间戳>240 ;
console.logfinal;两个答案有相同的答案。谢谢你们两个!两个答案有相同的答案。谢谢你们两个!