210815 TIL

코드아카데미 문제 풀이

JAVASCRIPT SYNTAX, PART II - Object

오브젝트에 대한 기초적 개념을 배운 후 활용하는 문제

상황

좋아하는 스포츠 팀의 선수들과 팀이 가졌던 경기 정보를 만들고자 한다.

문제

좋아하는 스포츠 팀의 선수들의 성, 이름, 나이에 관한 정보(5명 이하)를 저장하고 출력하세요.
경기에 대한 정보로 상대팀 나라, 팀 포인트, 상대 팀 포인트에 관한 정보를 저장하고 출력하세요.
스포츠 팀의 선수들 정보와 경기에 대한 정보는 출력마나 가능하고 값을 변경하는 것을 원하지 않습니다.

할 일

  1. 좋아하는 스포츠 팀에 대한 선수정보와 게임정보 그리고 동적으로 데이터를 추가할 수 있는 동작을 구조화 할 수 있는 team 객체를 생성한다.
  2. team 객체 안에 선수 정보를 담을 수 있는 _palyers프로퍼티와 게임 정보를 담을 수 있는 _games프로퍼티를 생성한다.
  3. palyers 프로퍼티에 선수들의 성, 이름, 나이 데이터를 추가한다.
  4. games 프로퍼티에 상대팀 나라, 팀 점수, 상대팀 점수 데이터를 추가한다.
  5. team객체 안에 palyers과 games속성을 getter을 통해 출력만 가능하도록 만든다.
  6. team 객체 내 palyers에 새로운 선수들을 추가할 수 있는 메서드를 만든다.
  7. team 객체 내 games에 새로운 게임들을 추가할 수 있는 메서드를 만든다.
  8. 선수들과 게임에 대한 데이터를 추가하고 출력한다.

team 객체에 필요한 속성들

  • _players 빈 배열
  • _games 빈 배열
  • 빈 배열의 _players에 추가할 수 있는 함수
  • 빈 배열의 _games에 추가할 수 있는 함수

문제해결

1. team 객체 생성

const team = {}

2. 선수 정보를 담을 수 있는 _palyers프로퍼티와 게임 정보를 담을 수 있는 _games프로퍼티를 생성

_players:[],
_games:[],

3. palyers 프로퍼티에 선수들의 성, 이름, 나이 데이터를 추가

  _players:[
    {
      firstName: '연경',
      lastName: '김',
      age: 34
    },
    {
      firstName: '희진',
      lastName: '김',
      age: 31
    },
    {
      firstName: '효진',
      lastName: '양',
      age: 33
    },
  ],

4. games 프로퍼티에 상대팀 나라, 팀 점수, 상대팀 점수 데이터를 추가

  _games:[
    {
      opponent:'Brazil',
      teamPoints: 0,
      opponentPoints: 3
    },
    {
      opponent:'Japan',
      teamPoints: 3,
      opponentPoints: 2
    },
    {
      opponent:'Dominican Republic',
      teamPoints: 3,
      opponentPoints: 2
    },
  ],

5. palyers과 games속성에 getter 함수를 추가

  get players(){
    return this._players;
  },
  get games(){
    return this._games;
  },

6. palyers에 새로운 선수들을 추가할 수 있는 메서드 만들기

  addPlayer(firstName,lastName,age){
    let player = {
      firstName,
      lastName,
      age
    };
    this.players.push(player);
  },

왜 firstName: firstName 이 아닐까?
ES6에서는 매개변수 이름과 프로퍼티 키 이름이 동일하면 프로퍼티 키를 생략할 수 있다. 이때 프로퍼티 키는 매개변수 이름으로 자동 생성된다.

7. games에 새로운 게임들을 추가할 수 있는 메서드를 만들기

addGame(opponent,teamPoints,opponentPoints){
    let game = {
      opponent,
      teamPoints,
      opponentPoints
    };
    this._games.push(game);
  }

8. 선수들과 게임에 대한 데이터를 추가하고 출력

team.addPlayer('정아','박',29);
team.addPlayer('혜진','안',23);

team.addGame('Serbia',0,3);
team.addGame('Kenya',3,0);
team.addGame('turkey',3,2);
team.addGame('Brazil',0,3);
team.addGame('Serbia',0,3);

console.log(team.players);
console.log(team.games);

/* 
[ { firstName: '연경', lastName: '김', age: 34 },
  { firstName: '희진', lastName: '김', age: 31 },
  { firstName: '효진', lastName: '양', age: 33 },
  { firstName: '정아', lastName: '박', age: 29 },
  { firstName: '혜진', lastName: '안', age: 23 } ]
[ { opponent: 'Brazil', teamPoints: 0, opponentPoints: 3 },
  { opponent: 'Japan', teamPoints: 3, opponentPoints: 2 },
  { opponent: 'Dominican Republic', teamPoints: 3, opponentPoints: 2 },
  { opponent: 'Serbia', teamPoints: 0, opponentPoints: 3 },
  { opponent: 'Kenya', teamPoints: 3, opponentPoints: 0 },
  { opponent: 'turkey', teamPoints: 3, opponentPoints: 2 },
  { opponent: 'Brazil', teamPoints: 0, opponentPoints: 3 },
  { opponent: 'Serbia', teamPoints: 0, opponentPoints: 3 } ] 
*/

전체 코드

const team ={
  _players:[
    {
      firstName: '연경',
      lastName: '김',
      age: 34
    },
    {
      firstName: '희진',
      lastName: '김',
      age: 31
    },
    {
      firstName: '효진',
      lastName: '양',
      age: 33
    },
  ],
  _games:[
    {
      opponent:'Brazil',
      teamPoints: 0,
      opponentPoints: 3
    },
    {
      opponent:'Japan',
      teamPoints: 3,
      opponentPoints: 2
    },
    {
      opponent:'Dominican Republic',
      teamPoints: 3,
      opponentPoints: 2
    },
  ],
  get players(){
    return this._players;
  },
  get games(){
    return this._games;
  },
  addPlayer(firstName,lastName,age){
    let player = {
      firstName,
      lastName,
      age
    };
    this.players.push(player);
  },
  addGame(opponent,teamPoints,opponentPoints){
    let game = {
      opponent,
      teamPoints,
      opponentPoints
    };
    this._games.push(game);
  }
}
team.addPlayer('정아','박',29);
team.addPlayer('혜진','안',23);

team.addGame('Serbia',0,3);
team.addGame('Kenya',3,0);
team.addGame('turkey',3,2);
team.addGame('Brazil',0,3);
team.addGame('Serbia',0,3);

console.log(team.players);
console.log(team.games);

좋은 웹페이지 즐겨찾기