const movie2019 = {
action: 3000,
horror: 5000,
drama: 4000,
};
const movie2020 = {
action: 3000,
horror: 5000,
drama: 4000,
};
2019년과 2020년의 3가지 영화장르가 있고 장르의 값들이 나와있다.
합을 구하기 위해서는 새로운 object에 각각의 값의 합을 집어 넣어야 한다. 각각의 장르를 확인하기 위하여 반복문을 사용하여야 하며, reduce를 사용해 보겠다.
const movieGenreTotal = () => {
const genre = Object.keys(movie2019);
return genre;
};
console.log(movieGenreTotal());
/// ['action', 'horror', 'drama']
일단 Object.keys()를 사용하여 배열안에 장르명들을 뽑았다.
그래야 반복문을 돌며 새로운 값을 집어 넣을 수 있다.
const movieGenreTotal = () => {
const genre = Object.keys(movie2019);
const movieGenreTotal = genre.reduce((acc, curr) => {
if (!acc[curr]) {
acc[curr] = 0;
}
acc[curr] = movie2019[curr] + movie2020[curr];
return acc;
}, {});
return movieGenreTotal;
};
console.log(movieGenreTotal());
//{action: 6000, horror: 10000, drama: 8000}
reduce에서 첫번째 acc는 {}이 되고 {}안에 curr이 없다면 "acc[curr] = 0"이다로 시작하였다. 그다음에는 2020,2019각각의 curr이 같기 때문에 값을 더해서 집어 넣었다. 그리고 다시 반복문을 돌때는 if문 조건이 맞지 않기 때문에 무시하고 다음 합을 집어 넣는 것이다.
acc와 curr이 헷갈려서 답이 바로 나오지 않아 여러번 수정하였다.
reduce를 더 많이 사용하여 익숙해지도록 하자.
const movieGenreTotal = () => {
const genreTotal = {};
const movieGenre = Object.keys(movie2019);
movieGenre.forEach((genre) => {
if (!genreTotal[genre]) {
genreTotal[genre] = 0;
}
genreTotal[genre] = movie2019[genre] + movie2020[genre];
});
return genreTotal;
};
console.log(movieGenreTotal());
//{action: 6000, horror: 10000, drama: 8000}
reduce와 같은 개념으로 접근 하였다. 다만 다른점은 reduce는 initialValue로 {}를 주었고, forEach는 변수로 새로운 object를 선언하여야했다.
변수명을 대충짓다보니 다시볼때 많이 헷갈리게 되어서 변수명에 신경을 많이 써야겠다.