JS|科目単位アルファベット変更関数の作成
29409 ワード
問題を解く目的
質問する
以下の説明を読んでgetExamResult関数を実装してください.
パラメータscoresは次のオブジェクトです.オブジェクト内の要素の数とキーの名前が異なる場合があります.オブジェクトの値には、次の9つの文字列のいずれかがあります.'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
scores = {
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
}
パラメータrequiredClassesは、次のように文字列配列です.['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
関数を実装して、次の条件を満たすオブジェクトを返します.
スコアオブジェクトが持つキーは、新しいオブジェクトに含める必要があります.ただし、これらの値は、次の原理に従って数値に変換して割り当てる必要があります.A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0
アイテムがRequiredClosses配列の要素として存在し、スコアのキーが存在しない場合は、その要素は新しいオブジェクトのキーであり、値は0である必要があります.上記の例で説明したオブジェクトと配列がパラメータとして入力されている場合、次のオブジェクトが返されます.要素間の順序は異なる場合がありますが、スコアには関係ありません.{
'생활속의회계': 2,
'논리적글쓰기': 3,
'독일문화의이해': 3.5,
'기초수학': 1.5,
'영어회화': 2.5,
'인지발달심리학': 4.5,
'공학수학': 0,
'컴퓨터과학개론': 0,
}
解法
新しいオブジェクトを作成して値を挿入...値を他のオブジェクトと比較...また割り当て...
静かに座って考えていたら、考えが狂って、白い板の上でゆっくりと整理されていました.
まるまる2時間も悩んだが、結局は自分の力で満足感を得た.
自分の悩みを解決するための考え方と、会話で知っている解決策をまとめてみましょう.
私の答え
構想
step 1
scores
オブジェクトの値は、それぞれkey(과목명)
およびvalue(알파벳 학점)
に配列される.
value(アルファベット単位)値を数値に変換する新しい配列numValues(숫자 학점)
が作成された.// scores의 key와 value 값들 배열화
const keys = Object.keys(scores);
const values = Object.values(scores);
// values값 숫자로 바꾸기
const numValues = values.map(x =>
{if(x === 'A+'){return 4.5}
else if(x === 'A'){return 4}
else if(x === 'B+'){return 3.5}
else if(x === 'B'){return 3}
else if(x === 'C+'){return 2.5}
else if(x === 'C'){return 2}
else if(x === 'D+'){return 1.5}
else if(x === 'D'){return 1}
else if(x === 'F'){return 0}
});
step 2
空の新しいゲストobj
が作成され、{科目名:デジタル単位}として付与されます.
まず、RequiredClassesを考慮せずに、単位を文字>>数字に変換する対象の実装を完了します.// {scores 과목:숫자점수} 객체 생성 및 값 할당
const obj = {};
for (let i in keys){
obj[keys[i]] = numValues[i];};
step 3
requiredClasses
対象のkey(과목명)
において、点数に含まれない科目名 value값(숫자 학점)
は0を与えるべきである.
{ScoresとRequiredClossesの差セット科目名:0}形状を持つ新しいオブジェクト(plusObject)を生成し、科目名の差セットを求めてplusObjectに割り当てる.
科目名の差セットはろ過方法を用いて,スコアに含まれないキー値の新しい配列を返す方式を選択した.let difference = a.filter(x => !b.includes(x))
// {scores & requiredClasses 차집합 과목 : 0} 객체(plusObj) 생성
const plusObj = {};
const minor = requiredClasses.filter(x => !keys.includes(x));
//plusObj에 key(minor):value(0) 값 할당
for(let i in minor){
plusObj[minor[i]]=0;
};
step 4
{Scores科目名:数値単位}のobjオブジェクトと{Scores/RequiredClossesのサブセット科目名:0}のplusObjectのオブジェクトfinal
を作成して返します.// 기존 obj객체와 plusObj객체를 합치고 반환
const final = Object.assign(obj,plusObj);
return final;
正しいコード
const getExamResult = (scores, requiredClasses) => {
// scores의 key와 value 값들 배열화
const keys = Object.keys(scores);
const values = Object.values(scores);
// values값 숫자로 바꾸기
const numValues = values.map(x =>
{if(x === 'A+'){return 4.5}
else if(x === 'A'){return 4}
else if(x === 'B+'){return 3.5}
else if(x === 'B'){return 3}
else if(x === 'C+'){return 2.5}
else if(x === 'C'){return 2}
else if(x === 'D+'){return 1.5}
else if(x === 'D'){return 1}
else if(x === 'F'){return 0}
});
// {scores 과목:숫자점수} 객체 생성 및 값 할당
const obj = {};
for (let i in keys){
obj[keys[i]] = numValues[i];};
// {scores & requiredClasses 차집합 과목 : 0} 객체(plusObj) 생성
const plusObj = {};
const minor = requiredClasses.filter(x => !keys.includes(x));
//plusObj에 key(minor):value(0) 값 할당
for(let i in minor){
plusObj[minor[i]]=0;
};
// 기존 obj객체와 plusObj객체를 합치고, 반환
const final = Object.assign(obj,plusObj);
return final;
に感銘を与える
'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
scores = {
'생활속의회계': 'C',
'논리적글쓰기': 'B',
'독일문화의이해': 'B+',
'기초수학': 'D+',
'영어회화': 'C+',
'인지발달심리학': 'A+',
}
['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']
A+ => 4.5
A => 4
B+ => 3.5
B => 3
C+ => 2.5
C => 2
D+ => 1.5
D => 1
F => 0
{
'생활속의회계': 2,
'논리적글쓰기': 3,
'독일문화의이해': 3.5,
'기초수학': 1.5,
'영어회화': 2.5,
'인지발달심리학': 4.5,
'공학수학': 0,
'컴퓨터과학개론': 0,
}
新しいオブジェクトを作成して値を挿入...値を他のオブジェクトと比較...また割り当て...
静かに座って考えていたら、考えが狂って、白い板の上でゆっくりと整理されていました.
まるまる2時間も悩んだが、結局は自分の力で満足感を得た.
自分の悩みを解決するための考え方と、会話で知っている解決策をまとめてみましょう.
私の答え
構想
step 1
scores
オブジェクトの値は、それぞれkey(과목명)
およびvalue(알파벳 학점)
に配列される.value(アルファベット単位)値を数値に変換する新しい配列
numValues(숫자 학점)
が作成された.// scores의 key와 value 값들 배열화
const keys = Object.keys(scores);
const values = Object.values(scores);
// values값 숫자로 바꾸기
const numValues = values.map(x =>
{if(x === 'A+'){return 4.5}
else if(x === 'A'){return 4}
else if(x === 'B+'){return 3.5}
else if(x === 'B'){return 3}
else if(x === 'C+'){return 2.5}
else if(x === 'C'){return 2}
else if(x === 'D+'){return 1.5}
else if(x === 'D'){return 1}
else if(x === 'F'){return 0}
});
step 2
空の新しいゲスト
obj
が作成され、{科目名:デジタル単位}として付与されます.まず、RequiredClassesを考慮せずに、単位を文字>>数字に変換する対象の実装を完了します.
// {scores 과목:숫자점수} 객체 생성 및 값 할당
const obj = {};
for (let i in keys){
obj[keys[i]] = numValues[i];};
step 3
requiredClasses
対象のkey(과목명)
において、点数に含まれない科目名 value값(숫자 학점)
は0を与えるべきである.{ScoresとRequiredClossesの差セット科目名:0}形状を持つ新しいオブジェクト(plusObject)を生成し、科目名の差セットを求めてplusObjectに割り当てる.
科目名の差セットはろ過方法を用いて,スコアに含まれないキー値の新しい配列を返す方式を選択した.
let difference = a.filter(x => !b.includes(x))
// {scores & requiredClasses 차집합 과목 : 0} 객체(plusObj) 생성
const plusObj = {};
const minor = requiredClasses.filter(x => !keys.includes(x));
//plusObj에 key(minor):value(0) 값 할당
for(let i in minor){
plusObj[minor[i]]=0;
};
step 4
{Scores科目名:数値単位}のobjオブジェクトと{Scores/RequiredClossesのサブセット科目名:0}のplusObjectのオブジェクト
final
を作成して返します.// 기존 obj객체와 plusObj객체를 합치고 반환
const final = Object.assign(obj,plusObj);
return final;
正しいコード
const getExamResult = (scores, requiredClasses) => {
// scores의 key와 value 값들 배열화
const keys = Object.keys(scores);
const values = Object.values(scores);
// values값 숫자로 바꾸기
const numValues = values.map(x =>
{if(x === 'A+'){return 4.5}
else if(x === 'A'){return 4}
else if(x === 'B+'){return 3.5}
else if(x === 'B'){return 3}
else if(x === 'C+'){return 2.5}
else if(x === 'C'){return 2}
else if(x === 'D+'){return 1.5}
else if(x === 'D'){return 1}
else if(x === 'F'){return 0}
});
// {scores 과목:숫자점수} 객체 생성 및 값 할당
const obj = {};
for (let i in keys){
obj[keys[i]] = numValues[i];};
// {scores & requiredClasses 차집합 과목 : 0} 객체(plusObj) 생성
const plusObj = {};
const minor = requiredClasses.filter(x => !keys.includes(x));
//plusObj에 key(minor):value(0) 값 할당
for(let i in minor){
plusObj[minor[i]]=0;
};
// 기존 obj객체와 plusObj객체를 합치고, 반환
const final = Object.assign(obj,plusObj);
return final;
に感銘を与える
セッションプール
Q&A会では本題の解題過程を紹介してくれましたが、私と何が違いますか.
思考の流れ&正解コード
const getExamResult = (scores, requiredClasses) => {
// 비어있는 새로운 객체object 만들기
const obj = new Object();
// {알파벳 학점 : 숫자 학점} 값의 객체 만들기
const gradeMap = {
"A+":4.5,
"A":4,
"B+":3.5,
"B":3,
"C+":2.5,
"C":2.0,
"D+":1.5,
"D":1,
"F":0
}
// scores[key](알파벳 학점)를 변수 grade에 할당
// 빈 객체 obj의 key에는 scores의 key(과목명)를, 값에는 gradeMap의 값(숫자 학점) 할당
for (let key in scores) {
const grade = scores[key];
obj[key] = gradeMap[grade];
}
// requiredClasses의 값(과목명)을 변수 ClassName에 할당
// obj의 key 중 ClassName의 값이 없으면 undefined가 반환되니, 그럴 경우 값에 0할당
// 최종 답안인 obj 리턴
for (let i = 0; i < requiredClasses.length; i++) {
const className = requiredClasses[i];
if (obj[className] === undefined) {
obj[className] = 0;
}
}
return obj;
}
に感銘を与える
私の解答とは異なり、{アルファベット単位:数値単位}のオブジェクト
gradeMap
が作成され、新しい空のオブジェクトにより簡単なfor文key、value値が割り当てられます.つまり、オブジェクトのプロパティを使用すると便利です.また、scoresとrequiredClossesの科目順位セットからなるオブジェクトを再作成し、最終的に前のオブジェクトとマージされた値を返しました.ここでは、オブジェクトのプロパティを使用して、値がundefinedになった場合、値に0を割り当てる方法を使用しました.
Reference
この問題について(JS|科目単位アルファベット変更関数の作成), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_bomdong/객체-bracket-notation-객체-순회テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol