首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实践JavaSccript

实践JavaSccript
EN

Stack Overflow用户
提问于 2021-10-10 04:23:33
回答 2查看 38关注 0票数 0

我目前正在练习JS,这是一个我很难解决的问题。你能试着解决这个问题并分享你的代码吗?

像这样的对象:对象的组合和屏幕的图像。对象的值是以下九种模式之一。

  • 'A+','A','B',‘B’,'C+','C','D',‘D’,'F'

代码语言:javascript
复制
{
 'classA': 'C',
 'classB': 'B',
 'classC': 'B+',
 'classD': 'D+',
 'classE': 'C+',
 'classF': 'A+',
}

参数requiredClasses是一个字符串数组:'classsE‘、'classD’、'classO‘、'classP’

实现函数以返回满足以下条件的对象。

得分对象所持有的键必须包含在新对象中。但是,这些值必须转换为数字,并按照以下原则分配。

代码语言:javascript
复制
A+ => 4.5

A => 4

B+ => 3.5

B => 3

C+ => 2.5

C => 2

D+ => 1.5

D => 1

F => 0

如果有一个项作为requiredClasses数组的元素存在,但不作为得分键存在,则该元素将成为新对象的键,并且必须值为0。如果将上面示例中描述的对象和数组作为参数输入,则返回该对象和以下内容。元素之间的顺序可能不同,但与评分无关。

我试着自己解决这个问题。

代码语言:javascript
复制
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;
}

如果你有更好的代码,请告诉我,或者让我知道哪一部分是错误的。我真的很感谢你提前回答。

EN

回答 2

Stack Overflow用户

发布于 2021-10-10 05:03:01

我想出了一个解决方案:

代码语言:javascript
复制
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))

票数 0
EN

Stack Overflow用户

发布于 2021-10-10 05:10:53

假设我正确理解了你的帖子,这就是我的解决方案。

代码语言:javascript
复制
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 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69512285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档