訂判斷及所需輸入
本例用已附整數日序,不做時區換算。篩選第十天存,第十二天跑,包含兩端的七天是6至12,所以 B6、C11 配到,A4 離開現時結果;第十天固定快照仍 A4、B6。
| 情況 | 輸入 JSON |
|---|---|
| 原例測試 | {"savedDay":10,"executedDay":12,"records":[{"id":"A","day":4},{"id":"B","day":6},{"id":"C","day":11}]} |
跑所附比較
可執行選取同時保現時及快照編號。相對算式與已存結果是不同資料,現時成員改了,不會因此令原快照出錯。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"liveIds":["A","B","C"],"snapshotIds":["A","B"]} |
| 所需路徑 | {"liveIds":["B","C"],"snapshotIds":["A","B"]} |
import assert from 'node:assert/strict';
const run=function run(i,corrected=true){
if(i.executedDay===null)return {held:true};const cutoff=(corrected?i.executedDay:i.savedDay)-6;
return {liveIds:i.records.filter(r=>r.day>=cutoff&&r.day<=i.executedDay).map(r=>r.id),snapshotIds:i.records.filter(r=>r.day>=i.savedDay-6&&r.day<=i.savedDay).map(r=>r.id)};
};
const cases=[{"input":{"savedDay":10,"executedDay":12,"records":[{"id":"A","day":4},{"id":"B","day":6},{"id":"C","day":11}]},"corrected":false,"expected":{"liveIds":["A","B","C"],"snapshotIds":["A","B"]}},{"input":{"savedDay":10,"executedDay":12,"records":[{"id":"A","day":4},{"id":"B","day":6},{"id":"C","day":11}]},"corrected":true,"expected":{"liveIds":["B","C"],"snapshotIds":["A","B"]}},{"input":{"savedDay":10,"executedDay":10,"records":[{"id":"A","day":4},{"id":"B","day":11}]},"corrected":true,"expected":{"liveIds":["A"],"snapshotIds":["A"]}},{"input":{"savedDay":10,"executedDay":null,"records":[]},"corrected":true,"expected":{"held":true}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
按邊界依據作判斷
在原日執行會沿同一快照界;執行日欠缺就停,不用儲存時間代填。
- 核算式及快照基準
- 取執行時範圍
- 兩組結果編號都留
不能把已存相對查詢靜靜變成舊固定界線。
| 條件 | 輸入 JSON | 預期輸出 JSON |
|---|---|---|
| 執行日與快照同日 | {"savedDay":10,"executedDay":10,"records":[{"id":"A","day":4},{"id":"B","day":11}]} | {"liveIds":["A"],"snapshotIds":["A"]} |
| 執行日基準未知 | {"savedDay":10,"executedDay":null,"records":[]} | {"held":true} |
原例現時及快照各有哪些編號?
查看參考答案
現時 B、C;快照 A、B。各沿自己已訂日期基準,兩個都可同時正確。