跳至內容
Astera Technology

核對工具讀取欄位是否超出指定資料

讀取前先列擬取欄位的欠項、多項及重複項。

下載完整個案資料及參考答案 ↓

訂明本例驗收任務

假設讀取任務明訂須取欄位集合。擬用呼叫須一樣,不能漏、不能多,欄位也不能重複。讀資料前先列三類錯誤;所需欄位是本例任務範圍,不自行推定權限政策。

  1. 保留所需欄位集合
  2. 核欠、多及重複欄位
  3. 讀取前保留無效提議

欄位不符先改計劃,不去取額外欄。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
多取備註欄{"required":["id","state"],"requested":["id","state","internalNote"]}{"extra":["internalNote"],"missing":[],"duplicates":[],"valid":false}internalNote 超出所列讀取欄位。
欄位一樣而次序不同{"required":["id","state"],"requested":["state","id"]}{"extra":[],"missing":[],"duplicates":[],"valid":true}本例欄位集合無序,兩個都齊。
id 重複且欠 state{"required":["id","state"],"requested":["id","id"]}{"extra":[],"missing":["state"],"duplicates":["id"],"valid":false}兩次 id 不能代替 state,也違反不重複要求。
下載可編輯 CSV ↓

逐步處理 duplicate-missing 個案,須得到甚麼結果?原因是甚麼?

查看參考答案

{"extra":[],"missing":["state"],"duplicates":["id"],"valid":false}。兩次 id 不能代替 state,也違反不重複要求。

執行完整本機驗算

另存為 .mjs,以 Node.js 執行;只驗提供的個案
import assert from 'node:assert/strict';

function evaluate(x){
 const required=[...new Set(x.required)].sort(),requested=[...new Set(x.requested)].sort();const duplicates=requested.filter(k=>x.requested.filter(v=>v===k).length>1);
 const extra=requested.filter(k=>!required.includes(k)),missing=required.filter(k=>!requested.includes(k));return {extra,missing,duplicates,valid:extra.length+missing.length+duplicates.length===0};
}

const cases = [
  {
    "id": "extra-note",
    "input": {
      "required": [
        "id",
        "state"
      ],
      "requested": [
        "id",
        "state",
        "internalNote"
      ]
    },
    "expected": {
      "extra": [
        "internalNote"
      ],
      "missing": [],
      "duplicates": [],
      "valid": false
    }
  },
  {
    "id": "exact-projection",
    "input": {
      "required": [
        "id",
        "state"
      ],
      "requested": [
        "state",
        "id"
      ]
    },
    "expected": {
      "extra": [],
      "missing": [],
      "duplicates": [],
      "valid": true
    }
  },
  {
    "id": "duplicate-missing",
    "input": {
      "required": [
        "id",
        "state"
      ],
      "requested": [
        "id",
        "id"
      ]
    },
    "expected": {
      "extra": [],
      "missing": [
        "state"
      ],
      "duplicates": [
        "id"
      ],
      "valid": false
    }
  }
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
下載可執行例子 ↓

欄位清單可作本機計劃驗收表。此項通過與登入、權限及回傳值正確與否分開。

相關資源