[英]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.