訂判斷及所需輸入
本例格式限 U 或 S、兩個小數位及 kg 或 g。先是不穩定1.20kg,再穩定1.25kg。已訂規則取首個穩定訊息,得1,250,000mg,來源 kg 仍留。首個看得懂的數字未必合資格。
| 情況 | 輸入 JSON |
|---|---|
| 原例測試 | {"messages":["U|1.20|kg","S|1.25|kg"]} |
跑所附比較
程序解析所附字串,以百分之一單位整數換算,不連真實磅,也不確認校準或自訂設備穩定容差。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"stableCaptured":false,"milligrams":1200000,"sourceUnit":"kg"} |
| 所需路徑 | {"stableCaptured":true,"milligrams":1250000,"sourceUnit":"kg"} |
import assert from 'node:assert/strict';
const run=function run(i,corrected=true){
const messages=i.messages.map(s=>{const match=/^([US])\|(\d+)\.(\d{2})\|(kg|g)$/.exec(s);if(!match)throw new Error('Outside the literal device grammar');return {stable:match[1]==='S',hundredths:Number(match[2])*100+Number(match[3]),unit:match[4]};});
const captured=corrected?messages.find(m=>m.stable):messages[0];if(!captured)return {held:true,reason:'no-stable-reading'};
return {stableCaptured:captured.stable,milligrams:captured.hundredths*(captured.unit==='kg'?10000:10),sourceUnit:captured.unit};
};
const cases=[{"input":{"messages":["U|1.20|kg","S|1.25|kg"]},"corrected":false,"expected":{"stableCaptured":false,"milligrams":1200000,"sourceUnit":"kg"}},{"input":{"messages":["U|1.20|kg","S|1.25|kg"]},"corrected":true,"expected":{"stableCaptured":true,"milligrams":1250000,"sourceUnit":"kg"}},{"input":{"messages":["S|1250.00|g"]},"corrected":true,"expected":{"stableCaptured":true,"milligrams":1250000,"sourceUnit":"g"}},{"input":{"messages":["U|1.20|kg"]},"corrected":true,"expected":{"held":true,"reason":"no-stable-reading"}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
按邊界依據作判斷
穩定1250.00g 得同一毫克值,g 仍留;全是 U 就以 no-stable-reading 暫停。
- 沿已訂格式讀
- 選穩定訊息
- 原單位與統一值一起留
沒有穩定依據就停,不用最後未穩定數字頂替。
| 條件 | 輸入 JSON | 預期輸出 JSON |
|---|---|---|
| 穩定值以克表示 | {"messages":["S|1250.00|g"]} | {"stableCaptured":true,"milligrams":1250000,"sourceUnit":"g"} |
| 沒有穩定訊息 | {"messages":["U|1.20|kg"]} | {"held":true,"reason":"no-stable-reading"} |
原例可收哪個讀數?
查看參考答案
穩定1.25kg。按所附穩定標記規則,早前1.20kg 仍不合資格。