[英]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.