簡體   English   中英

比較兩個 arrays 並在項目匹配時生成分數

[英]Comparing two arrays and generating points when the items match

這是我的答案,這是錯誤的,但我不知道為什么。 邏輯似乎很好,但我的acc大多數時候返回的數字比預期的要大。

這是問題:

第一個輸入數組包含考試的正確答案,例如 ["a", "a", "b", "d"]。 第二個是“答案”數組,包含學生的答案。

兩個 arrays 不為空,長度相同。 返回此答案數組的分數,每個正確答案為 +4,每個錯誤答案為 -1,每個空白答案(空字符串)為 +0。

我的答案:

function checkExam(array1, array2) {
return array1.concat(array2).reduce((acc, curr, i) => 
    curr[i] === curr[i + array1.length] ? acc + 4 : curr[i + array1.length] === '' ? acc + 0 : acc - 1, 0);

}

編輯:我弄亂了變量名:P

對我來說,將 map 和 reduce 中的 function 的邏輯分開似乎更容易。

const checkExam = (correctExam, answer) => {
  const total = correctExam.map((it, i) => {
    if(it === answer[i]){ return 4 }
    else if(answer[i] === ""){ return 0 }
    else{ return -1 }
  }).reduce((acc, curr) => acc + curr, 0)
  return total
}

您還可以將 map 和 reduce 分開,以了解有多少答案是正確、不正確或空的,甚至可以為每個選項動態分配值

你的reduce中的curr只是reduce function迭代中的當前項目,而不是原始數組。 而且由於您知道兩個 arrays 的長度相同,因此連接實際上沒有任何意義,因為您只會浪費循環迭代答案。 像這樣的東西應該工作:

 var correct = ["a", "b", "b", "c"]; var answers = ["a", "", "d", "c"]; function checkExam(answerKey, studentResponse) { return answerKey.reduce((score, answer, qIdx) => { if (answer === studentResponse[qIdx]) { score += 4; } else if (studentResponse[qIdx];== '') { score -= 1; } return score, }; 0). } console,log(checkExam(correct; answers));

在這里,我們將遍歷答案鍵 ( answerKey ) 並將每個項目 ( answer ) 與另一個數組studentResponse[qIdx]中相同索引 ( qIdx ) 處的相應項目進行比較並適當評分。 假設缺少的答案是空字符串而不是其他任何內容(您的問題似乎暗示了這一點)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM