我目前正在练习JS,这是一个我很难解决的问题。你能试着解决这个问题并分享你的代码吗?
像这样的对象:对象的组合和屏幕的图像。对象的值是以下九种模式之一。
{
'classA': 'C',
'classB': 'B',
'classC': 'B+',
'classD': 'D+',
'classE': 'C+',
'classF': 'A+',
}参数requiredClasses是一个字符串数组:'classsE‘、'classD’、'classO‘、'classP’
实现函数以返回满足以下条件的对象。
得分对象所持有的键必须包含在新对象中。但是,这些值必须转换为数字,并按照以下原则分配。
A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0如果有一个项作为requiredClasses数组的元素存在,但不作为得分键存在,则该元素将成为新对象的键,并且必须值为0。如果将上面示例中描述的对象和数组作为参数输入,则返回该对象和以下内容。元素之间的顺序可能不同,但与评分无关。
我试着自己解决这个问题。
const getExamResult = (scores, requiredClasses) => {
let newScores = {};
const entries = Object.entries(scores);
//객체 key,object
let scoresKey = Object.keys(scores);
const scoresValue = Object.values(scores);
const newKeys = entries.map(el => el[0]);
console.log(newKeys);
const newValues = entries.map(el => { if (newKeys.key[0] === "A+"){
return 4.5;
}
else if (newKeys.key === "A") {
return 4;
}
else if (newKeys.key === "B+") {
return 3.5;
}
else if (newKeys.key === "B") {
return 3;
}
else if (newKeys.key === "C+") {
return 2.5;
}
else if (newKeys.key === "C") {
return 2;
}
else if (newKeys.key === "D+") {
return 1.5;
}
else if (newKeys.key === "D") {
return 1;
}
else
return 0;
});
for(let index in newKeys) {
newScores[newKeys[index]] = newValues[index];
}
for (let index in requiredClasses) {
if (newKeys.indexOf(`${requiredClasses[index]}`) === -1) {
newScores.requiredClasses[index] = 0;
}
}
return newScores;
}如果你有更好的代码,请告诉我,或者让我知道哪一部分是错误的。我真的很感谢你提前回答。
发布于 2021-10-10 05:03:01
我想出了一个解决方案:
classKey={
'classA': 'C',
'classB': 'B',
'classC': 'B+',
'classD': 'D+',
'classE': 'C+',
'classF': 'A+',
};
scoreKey={
"A+" : 4.5,
"A" : 4,
"B+" : 3.5,
"B" : 3,
"C+" : 2.5,
"C" : 2,
"D+" : 1.5,
"D" : 1,
"F" : 0
};
function classScore(classKey,scoreKey){
classKeyDup=classKey; //duplicate of class key, doesn't change original
for (x in classKeyDup){ //Iterate through classes marks
for(y in scoreKey){ //Iterate through scoreKey
if (classKeyDup[x]==y){ //Check the mark of the class
classKeyDup[x]=scoreKey[y]; //Apply Fixed score
}
}
}
return classKeyDup;
}
console.log(classScore(classKey,scoreKey))
发布于 2021-10-10 05:10:53
假设我正确理解了你的帖子,这就是我的解决方案。
const testResults = {
classA: "C",
classB: "B",
classC: "B+",
classD: "D+",
classE: "C+",
classF: "A+",
};
const testedClasses = ["classE", "classD", "classO", "classP"];
function getScoreFromGrade(grade) {
// convert a letter grade to a score
// a grade with a + in it adds 0.5 to the score
// any invalid grade or an f is a zero.
const scores = { a: 4, b: 3, c: 2, d: 1 };
const gradeParts = grade.toLowerCase().split("");
const currentGrade = gradeParts[0];
return !currentGrade in scores
? 0
: scores[currentGrade] + (gradeParts[1] === "+" ? 0.5 : 0);
}
function getExamScores(testResults, testedClasses) {
return testedClasses.reduce((retval, currentClass) => {
let score =
currentClass in testResults
? getScoreFromGrade(testResults[currentClass])
: 0;
retval[currentClass] = score;
return retval;
}, {});
}
console.log(getExamScores(testResults, testedClasses)) // { classE: 2.5, classD: 1.5, classO: 0, classP: 0 }https://stackoverflow.com/questions/69512285
复制相似问题