跳至內容
Astera Technology

把註腳連回有標記的欄位

每行只接自己的註腳標記,欠文字與沒有標記分開。

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

訂明本例驗收任務

假設選項表每行有明示註腳標記,另有標記與文字對照。只接該行自己的標記,沿原次序,重複只接一次。標記欠文字或值不是文字便列該行未確認;明示空字串仍保留為已提供文字,不推斷意思;沒有標記的行不可自行加限制。

  1. 讀各行的標記清單
  2. 逐個不同標記查文字
  3. 欠文字仍連回原行

對照欠標記文字便保留未確認。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
一行有註腳、一行沒有{"notes":{"*":"review"},"rows":[{"id":"A","markers":["*"]},{"id":"B","markers":[]}]}[{"id":"A","notes":["review"],"unknown":[],"resolved":true},{"id":"B","notes":[],"unknown":[],"resolved":true}]review 只接 A;B 沒有提供限制。
有標記但欠文字{"notes":{},"rows":[{"id":"A","markers":["*"]}]}[{"id":"A","notes":[],"unknown":["*"],"resolved":false}]保留欠文字的標記,不編造意思。
標記值是 null 而非文字{"notes":{"*":null},"rows":[{"id":"A","markers":["*"]}]}[{"id":"A","notes":[],"unknown":["*"],"resolved":false}]標記鍵雖存在,卻沒有提供所需文字。
明示空白註腳文字{"notes":{"*":""},"rows":[{"id":"A","markers":["*"]}]}[{"id":"A","notes":[""],"unknown":[],"resolved":true}]明示空字串沿用為文字,不編造限制。
同行標記重複{"notes":{"*":"review"},"rows":[{"id":"A","markers":["*","*"]}]}[{"id":"A","notes":["review"],"unknown":[],"resolved":true}]同一標記只加一則註腳,不當兩個條件。
下載可編輯 CSV ↓

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

查看參考答案

[{"id":"A","notes":["review"],"unknown":[],"resolved":true}]。同一標記只加一則註腳,不當兩個條件。

執行完整本機驗算

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

function evaluate(x){
 return x.rows.map(r=>{const markers=[...new Set(r.markers)],usable=m=>Object.hasOwn(x.notes,m)&&typeof x.notes[m]==='string',unknown=markers.filter(m=>!usable(m));return {id:r.id,notes:markers.filter(m=>usable(m)).map(m=>x.notes[m]),unknown,resolved:unknown.length===0};});
}

const cases = [
  {
    "id": "marked-and-unmarked",
    "input": {
      "notes": {
        "*": "review"
      },
      "rows": [
        {
          "id": "A",
          "markers": [
            "*"
          ]
        },
        {
          "id": "B",
          "markers": []
        }
      ]
    },
    "expected": [
      {
        "id": "A",
        "notes": [
          "review"
        ],
        "unknown": [],
        "resolved": true
      },
      {
        "id": "B",
        "notes": [],
        "unknown": [],
        "resolved": true
      }
    ]
  },
  {
    "id": "unknown-marker",
    "input": {
      "notes": {},
      "rows": [
        {
          "id": "A",
          "markers": [
            "*"
          ]
        }
      ]
    },
    "expected": [
      {
        "id": "A",
        "notes": [],
        "unknown": [
          "*"
        ],
        "resolved": false
      }
    ]
  },
  {
    "id": "nontext-note-content",
    "input": {
      "notes": {
        "*": null
      },
      "rows": [
        {
          "id": "A",
          "markers": [
            "*"
          ]
        }
      ]
    },
    "expected": [
      {
        "id": "A",
        "notes": [],
        "unknown": [
          "*"
        ],
        "resolved": false
      }
    ]
  },
  {
    "id": "explicit-empty-note-text",
    "input": {
      "notes": {
        "*": ""
      },
      "rows": [
        {
          "id": "A",
          "markers": [
            "*"
          ]
        }
      ]
    },
    "expected": [
      {
        "id": "A",
        "notes": [
          ""
        ],
        "unknown": [],
        "resolved": true
      }
    ]
  },
  {
    "id": "repeated-marker",
    "input": {
      "notes": {
        "*": "review"
      },
      "rows": [
        {
          "id": "A",
          "markers": [
            "*",
            "*"
          ]
        }
      ]
    },
    "expected": [
      {
        "id": "A",
        "notes": [
          "review"
        ],
        "unknown": [],
        "resolved": true
      }
    ]
  }
];
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)}));
下載可執行例子 ↓

保留行、標記及文字關係供下一步解讀。接註腳成功,不等於已判斷文字是否給予資格或許可。

相關資源