只有值大于或等于閾值的元素必須保留在陣列中。然后必須創建一個包含多個物件的新陣列。這些物件中的每一個都有兩個屬性,開始和結束。
如果一行中有多個元素(它們的時間戳相隔 10 分鐘),它們將被分組到同一個物件中。其中起始值將是第一個元素的時間戳,結束值將是組中最后一個元素的時間戳值加上 10 分鐘。
如果后面沒有多個元素,則起始值為時間戳,結束值為時間戳加 10 分鐘。
const data = [{
timestamp: '2021-11-23T14:00:00 0000',
amount: 21
},
{
timestamp: '2021-11-23T14:10:00 0000',
amount: 27
},
{
timestamp: '2021-11-23T14:20:00 0000',
amount: 31
},
{
timestamp: '2021-11-23T14:30:00 0000',
amount: 29
},
{
timestamp: '2021-11-23T14:40:00 0000',
amount: 18
},
{
timestamp: '2021-11-23T14:50:00 0000',
amount: 17
},
{
timestamp: '2021-11-23T15:00:00 0000',
amount: 25
},
{
timestamp: '2021-11-23T15:10:00 0000',
amount: 21
}
]
const threshold = 25
const aboveThreshold = data.filter(element => element.amount >= threshold)
const workSchedule = []
for (let i = 0; i < aboveThreshold.length; i ) {
if (i === 0) {
workSchedule.push({
start: aboveThreshold[i].timestamp,
end: aboveThreshold[i 1].timestamp
})
}
if (i > 0 && i < aboveThreshold.length - 1) {
if (aboveThreshold[i].timestamp.slice(11, 13) === aboveThreshold[i 1].timestamp.slice(11, 13)) {
workSchedule.push({
start: aboveThreshold[i].timestamp,
end: aboveThreshold[i 1].timestamp
})
}
}
if (i === aboveThreshold.length - 1) {
workSchedule.push({
start: aboveThreshold[i].timestamp,
end: aboveThreshold[i].timestamp
})
}
}
console.log(workSchedule)
但我想要的最終結果如下:
[
{
start: '2021-11-23T14:10:00 0000',
end: '2021-11-23T14:40:00 0000'
},
{
start: '2021-11-23T15:00:00 0000',
end: '2021-11-23T15:10:00 0000'
}
]
我希望我很清楚??,有沒有比我迄今為止所做的更簡單、更容易理解/閱讀的方法?
uj5u.com熱心網友回復:
你可以應用一個簡單的 reduce 函式來獲得你想要的結果,并得到Dateobject的一點幫助。這是一個解決方案:
const aboveThreshold = data.filter(element => element.amount >= threshold);
const nws = aboveThreshold.reduce((acc, v) => {
const end = new Date(Date.parse(v.timestamp) 600000);
if (acc.length === 0) return [{ start: v.timestamp, end: end.toISOString() }];
let diff = Date.parse(v.timestamp) - Date.parse(acc[acc.length - 1].end);
// checks if the difference is less than 10 minutes
if (diff <= 10 * 60 * 1000) {
acc[acc.length - 1].end = end.toISOString();
} else {
acc.push({ start: v.timestamp, end: end.toISOString() });
}
return acc
}, []);
查看減少檔案。
這是它給你的資料的結果
[{
end: "2021-11-23T14:40:00.000Z",
start: "2021-11-23T14:10:00 0000"
}, {
end: "2021-11-23T15:10:00.000Z",
start: "2021-11-23T15:00:00 0000"
}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364819.html
標籤:javascript 数组 打字稿
下一篇:Java:計算陣列中的對
