TIL(13) - Object

10937 단어 JavaScriptJavaScript

Object

https://storage.googleapis.com/replit/images/1553325719350_e5724b53410a3ea28d2a3e01f93d4fba.pn

해당 객체의 property값을 접근하고 싶을 때는 아래와 같습니다.

https://storage.googleapis.com/replit/images/1553326054270_3abb4dbced43c27aa14f183832ac7bda.pn

let objData = {
  name: 50,
  address: { 
    email: "[email protected]",
    home: "위워크 선릉2호점"
  },
  books: {
    year: [2019, 2018, 2006],
    info: [{
      name: "JS Guide",
      price: 9000
    }, {
      name: "HTML Guide",
      price: 19000,
      author: "Kim, gae bal"
    }]
  }
};

Assignment

이제까지 하셨던 Assignment 와는 조금 다른 유형입니다.
그 동안에는 특정값을 구해서 리턴 했다면, 이번에는 인자로 받은 데이터를 조합해서, 구조를 바꿔서 리턴합니다.

getData 함수를 구현해주세요!

  • getData 함수는 세 개의 배열을 인자로 받습니다.
    1. salesArr : 날짜별 판매량
      • ex) [["20190401", 34], ["20190402", 23], ["20190403", 29]]
    2. reviewArr : 날짜별 리뷰수
      • ex) [["20190328", 3], ["20190401", 0], ["20190403", 1]]
    3. likeArr : 날짜별 좋아요수
      • ex) [["20190328", 98], ["20190401", 102], ["20190403", 125]]
  • 다음 요구사항을 충족하는 객체를 만들어서 return 해주세요.
  • 리턴되는 객체는 아래와 같이 3개의 property를 가집니다.
    1. sumAmount : 총 판매량
    2. sumReview : 총 리뷰개수
    3. sumLike : 총 좋아요수
function getData(salesArr, reviewArr, likeArr) {
  // 총 판매량, 리뷰수, 좋아요수 0으로 초기화
  // 값을 누적해야되기 때문에 초깃값 0으로 할당해야 한다
  let saleSum = 0;
  let reviewSum = 0;
  let likeSum = 0;
  // 배열안의 또다른 배열
  // 그런데 더해야될 값이 들어있는 인덱스는 고정이므로 값은 인덱스1에 항상 고정
  // 바깥 배열의 인덱스만 구하는 for문을 구하면 된다
  for (i = 0; i < salesArr.length; i++) {
    saleSum += salesArr[i][1];
  }
 
  for (i = 0; i < reviewArr.length; i++) {
    reviewSum += reviewArr[i][1];
  }

  for (i = 0; i < likeArr.length; i++) {
    likeSum += likeArr[i][1];
  }

  // 총판매량 : 값, 총리뷰수 : 값, 총리뷰수 : 값을 가진 객체를 생성해
  let objData = {
    sumAmount: saleSum,
    sumReview: reviewSum,
    sumLike: likeSum
  };

  // 객체의 값 리턴
  return objData;
}

let sArr = [["20190401", 34], ["20190402", 23], ["20190403", 29]];
let rArr = [["20190328", 3], ["20190401", 0], ["20190403", 1]];
let lArr = [["20190328", 98], ["20190401", 102], ["20190403", 125]];

let check = getData(sArr, rArr, lArr);

console.log(check);
console.log(check.sumAmount);
console.log(check.sumReview);
console.log(check.sumLike);
결과

{ sumAmount: 86, sumReview: 4, sumLike: 325 }
86
4
325

Assignment

getAnswer 함수를 구현해 주세요.

  • getAnswer 함수는 아래의 객체에서 '샐러드' 라는 값을 출력합니다.
    let myProfile = {
      name: '김개발',
      address: {
        email: '[email protected]',
        home: '위워크'
      },
      'my favorite': {
        food: [{
          name: '샐러드',
          price: 3500
        }, {
          name: '삼겹살',
          price: 15000
        }],
        hobby: ['축구']
      }
    }
let myProfile = {
  name: '김개발',
  address: {
    email: '[email protected]',
    home: '위워크'
  },
  'my favorite': {
    food: [{
      name: '샐러드',
      price: 3500
    }, {
      name: '삼겹살',
      price: 15000
    }],
    hobby: ['축구']
  }
}

function getAnswer() {
  return myProfile['my favorite'].food[0].name;
}

Object.keys()

Object.keys 메소드는 어떤 객체가 가지고 있는 키들의 목록을 배열로 리턴하는 메소드입니다. 객체의 내장 메소드가 아니라 객체 생성자인 Object 가 직접 가지고 있는 메소드입니다.
Object.values, Object.entries 와 같은 자매품들이 추가되었습니다. Object.values 는 객체의 키가 아닌 값으로 이루어진 배열을 리턴합니다. Object.entries 는 객체의 키와 값의 쌍으로 이루어진 길이 2짜리 배열로 이루어진, 배열을 리턴합니다. 각 배열에서 인덱스 [0]의 값은 각각의 키를, 인덱스 [1]의 값은 해당 키에 해당하는 값을 가지게 됩니다.

for-in

객체를 가지고 for-in 문을 사용하면, for-in 문의 인덱스에 해당하는 변수가, 숫자가 아닌 객체의 각각의 키에 해당하는 문자열을 할당받게 됩니다.

Assignment

아래 설명을 읽고 getExamResult 함수를 구현하세요.

인자 scores 는 다음과 같은 객체입니다. 객체의 요소의 갯수 및 키의 이름들은 달라질 수 있습니다. 객체의 값은 다음 9가지 문자열 중에서 하나를 가지고 있습니다.

  • 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F'
{
  '생활속의회계': 'C',
  '논리적글쓰기': 'B',
  '독일문화의이해': 'B+',
  '기초수학': 'D+',
  '영어회화': 'C+',
  '인지발달심리학': 'A+',
}

인자 requiredClasses 는 다음과 같이 문자열로 된 배열입니다.

['영어회화', '기초수학', '공학수학', '컴퓨터과학개론']

다음 조건을 만족하는 객체를 리턴하도록 함수를 구현해주세요.

  1. scores 객체가 가지고 있는 키들은 새로운 객체에 포함되어야 합니다. 단, 그 값들은 다음 원리에 따라 숫자로 바뀌어 할당되어야 합니다.

    • A+ => 4.5
    • A => 4
    • B+ => 3.5
    • B => 3
    • C+ => 2.5
    • C => 2
    • D+ => 1.5
    • D => 1
    • F => 0
  2. requiredClasses 배열의 요소로는 존재하지만, scores의 키로는 존재하지 않는 항목이 있다면, 해당 요소는 새로운 객체의 키가 되고, 값으로 0을 가져야 합니다. 위에서 예시로 묘사된 객체와 배열이 인자로 들어왔다면, 다음과 같은 객체과 리턴됩니다. 요소간 순서는 다를수 있지만, 채점에 무관합니다.

    {
      '생활속의회계': 2,
      '논리적글쓰기': 3,
      '독일문화의이해': 3.5,
      '기초수학': 1.5,
      '영어회화': 2.5,
      '인지발달심리학': 4.5,
      '공학수학': 0,
      '컴퓨터과학개론': 0,
    }
const change = e => {
    switch(e){
      case 'A+':
        return 4.5
        break;
      case 'A':
        return 4
        break;        
      case 'B+':
        return 3.5
        break;        
      case 'B':
        return 3
        break;        
      case 'C+':
        return 2.5
        break;        
      case 'C':
        return 2 
        break;
      case 'D+':
        return 1.5 
        break;
      case 'D':
        return 1 
        break;
      case 'F':
        return 0 
        break;   
      default: 
        return 0 
  }
}

const changescore = (scores) => {
  const key = Object.keys(scores)
  for(let i = 0; i < key.length; i ++){
    scores[key[i]] = change(scores[key[i]])
  }
  return scores
}

const getExamResult = (scores, requiredClasses) => { 
  const key = Object.keys(scores)
  for (let i in requiredClasses){
    if(key.includes(requiredClasses[i]) === false){
      scores[requiredClasses[i]] = 0
    }
  }
  scores = changescore(scores); 
  return scores;
}

좋은 웹페이지 즐겨찾기