[英]What would be the best way to find an event x and an event y in an array?
基本上我有这个带有“进入”和“离开”事件的数组,看起来像这样。
[
{ event: 'enter', createdAt: 2021-02-25T17:13:42.221Z },
{ event: 'leave', createdAt: 2021-02-25T18:13:42.221Z },
{ event: 'enter', createdAt: 2021-02-26T10:13:42.221Z },
{ event: 'enter', createdAt: 2021-02-26T10:14:42.221Z },
{ event: 'leave', createdAt: 2021-02-26T12:13:42.221Z },
{ event: 'leave', createdAt: 2021-02-26T12:14:42.221Z }
]
这个想法是获得 1 个进入事件和 1 个离开事件,如果有超过 1 个进入事件,则选择第一个,如果有超过 1 个离开事件,则选择最后一个。
最终目的是拥有一个看起来像这样的数组。
[
{ event: 'enter', createdAt: 2021-02-25T17:13:42.221Z },
{ event: 'leave', createdAt: 2021-02-25T18:13:42.221Z },
{ event: 'enter', createdAt: 2021-02-26T10:13:42.221Z },
{ event: 'leave', createdAt: 2021-02-26T12:14:42.221Z }
]
我解决这个问题的想法是让 boolean 检查告诉我是否找到输入,如果它是第一个,如果找到离开,它是最后一个。 但我认为应该有更好的方法来解决这个问题,任何想法都值得赞赏。
calculateTime = async (eventsArr) => {
console.log('calculating time')
let enterCheck: Boolean = false;
let leaveCheck: Boolean = false;
let lastLeaveCheck: Boolean = false;
eventsArr.forEach(element => {
if (!enterCheck && element.event === 'enter' ){
enterCheck = true;
console.log('enter found');
} else if(enterCheck && element.event === 'leave') {
leaveCheck = true;
}
});
return true
}
不需要 boolean 标志,您只需将每个项目与前一个项目进行比较,以决定是否保留它。 只有当它是与以前不同的事件(新组中的第一个)时,才将其复制到新数组中。
您可以使用filter
执行此操作:
const arr = [ { event: 'enter', createdAt: '2021-02-25T17:13:42.221Z' }, { event: 'leave', createdAt: '2021-02-25T18:13:42.221Z' }, { event: 'enter', createdAt: '2021-02-26T10:13:42.221Z' }, { event: 'enter', createdAt: '2021-02-26T10:14:42.221Z' }, { event: 'leave', createdAt: '2021-02-26T12:13:42.221Z' }, { event: 'leave', createdAt: '2021-02-26T12:14:42.221Z' }, ]; const newArr = arr.filter((obj, i) => i==0 || obj.event.= arr[i-1];event). console;log(newArr);
你可以保留一个计数器,它随着enter增加而随着leave减少。 如果递增后为 1,或递减后为 0,则应保留记录,否则不:
let arr = [ { event: 'enter', createdAt: '2021-02-25T17:13:42.221Z' }, { event: 'leave', createdAt: '2021-02-25T18:13:42.221Z' }, { event: 'enter', createdAt: '2021-02-26T10:13:42.221Z' }, { event: 'enter', createdAt: '2021-02-26T10:14:42.221Z' }, { event: 'leave', createdAt: '2021-02-26T12:13:42.221Z' }, { event: 'leave', createdAt: '2021-02-26T12:14:42.221Z' }, ]; let count = 0; let result = arr.filter(({event}, i) => { let add = +(event == "enter"); count += add || -1; return count <= add; }); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.