문제점
타입스크립트 강의를 듣던 중, 아래의 평점을 구하는 함수를 작성해야 했음.
interface Student {
name: string;
age: number;
scores: {
korean: number;
math: number;
society: number;
science: number;
english: number;
};
}
아래와 같이 작성해도 답이 나올 수 있겠지만 만약 과목의 수가 바뀌면 ? 😧 5,6,7... 매번 하드코딩해서 과목의 수를 작성할 수도 없음.
function calculateAverage(student: Student): number {
const sum =
student.scores.korean +
student.scores.math +
student.scores.society +
student.scores.science +
student.scores.english;
const average = sum / 5;
return average;
}
시도해본 것
sum / scores.length <-- 당연히 배열의 프로퍼티를 객체에 가져다 쓰니 에러남.. 안될줄 알면서도 혹시나 해서 해봄.
해결방안
다음과 같이 작성하면 Object.keys(sudent.scores) 가 배열이 되어 length 프로퍼티를 사용할 수 있었다.
Object.keys() 함수는 객체 내 특성 속성을 이루는 값들을 배열로 변환한다. Object.keys(student.scores) 를 출력해보면 korean,math,society,science,english 형태로 나온다.
const average = sum / Object.keys(student.scores).length;
알게된 것
객체를 배열로 바꿔서 length 를 구하는 방법을 오늘 처음 알게되어 의미있던것 같다. 그동안 배열이나 문자열의 길이만을 length 프로퍼티로 구했었는데 새로운 접근방법을 알게되어서 좋았다.
'TIL' 카테고리의 다른 글
TIL 23.07.27 타입과 인터페이스 (0) | 2023.07.27 |
---|---|
TIL 23.07.26 TypeScript/ Node.js 기본 버전 설정 (0) | 2023.07.26 |
TIL 23.07.25 타입스크립트 실행 에러 (0) | 2023.07.25 |
WIL 23.07.17 ~ 23.07.24 아웃소싱 프로젝트를 마치며 (0) | 2023.07.24 |
TIL 23.07.19 카카오맵 API CORS 에러 간단하게 해결 (0) | 2023.07.19 |