首页 > 解决方案 > 练习 JavaScript

问题描述

我目前在练习 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 数组的元素存在,但不作为 score 的键存在,则该元素将成为新对象的键,并且值必须为 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;
}

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

标签: 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))


推荐阅读