object{a:1,b:2,c:3,d:4}

야 나 개 ·2021년 10월 22일
0
post-thumbnail

배열을 좀 알겠어?

그럼 바로 객체 간다!!!

사실 자바스크립트는 객체지향적이라고 해

사실 전부 객체로 이뤄졌다고 생각하면되
나중에 dom 을 개념을 이해할 때 객체라고 생각하면 좀 쉬워 ㅇㅋ?

그럼 렛츠고 역시나 몇 문제를 준비 했어

형은 기본문제는 안한다. (사실...이런게 기본문제얔ㅋㅋㅋㅋ) 진짜 여러웠는데.ㅜ

1번문제

객체를 입력받아 속성의 개수를 리턴해야 합니다.
예시

const obj = {
  a: 1,
  b: 2,
  c: 3,
};

let output = countNumberOfKeys(obj);
console.log(output); // --> 3

이번 문제는 객체의 반복을 어떻게 하는지 보여줄께 !!

수도코드
1.결과값을 반환할 카운트 변수를 선언한다.
2.객체의 키값 갯수만큼 반복시켜줘
3.반복될때마다 카운트 변수에 1씩 더해주는 식을 적어줘
4. 카운트 변수를 리턴해줘

정답코드

function countNumberOfKeys(obj) {
  // TODO: 여기에 코드를 작성합니다.
  let count = 0;
  for(let key in obj){
    count++
  }return count;
}

객체는 순서가 없어서 반복문은 저렇게 적어야 해~~ㅇㅋ?

가볍게 준비운동 끝


2번문제

배열과 객체를 입력받아 배열의 각 요소들을 객체의 키로 했을 때 그 값을 추출하여 만든 새로운 객체를 리턴해야 합니다.

예시

const arr = ['a', 'c', 'e'];
const obj = { a: 1, b: 2, c: 3, d: 4 };

let output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }

문제가 한방에 이해된 잼민이는 빨리 시험보러 가즈아 ~~ ㅋㅋㅋ

배열과 객체가 입력되는데 배열의 값이 객체의 키랑 같은것만 반환해줘라고 하는거야

포인트
1.배열도 반복
2.객체도 반복시켜야한다.
(이중반복문 모르면 다시 복습해) ㅇㅋ?

수도코드
1.결과값을 반환할 변수 선언하고 빈객체를 할당해줘 .
2.배열의 0번째부터 반복시키면서
3.객체의 키값과 비교해서 같은것만 결과 객체에 추가한다.

function select(arr, obj) {
  // TODO: 여기에 코드를 작성합니다.
  let result = {};
  
  for(let i = 0; i <= arr.length; i++){
    for(let key in obj){
      if(key === arr[i]){
        result[key] = obj[key];
      }
    } 
  }return result;
}

그리고 배열의 반복문도 바꿀수 있어 좀더 심플 하게

function select(arr, obj) {
  // TODO: 여기에 코드를 작성합니다.
  let result = {};
  
  for(let word of arr){  //  for(let i = 0; i <= arr.length; i++) 같은 뜻이고 word ===arr[i] 같은거야 !!! 외우자 
    for(let key in obj){
      if(key === word){
        result[key] = obj[key];
      }
    } 
  }return result;
}

for(let i = 0; i <= arr.length; i++) 같은 뜻이고 word ===arr[i] 같은거야 !!! 외우자

포인트
1.이중반복문
2.객체의 키랑 해당값 넣는방법 익히자


3번문제

객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 마지막 요소를 리턴해야 합니다.

예시

const obj1 = {
  a: 1,
  b: 2,
};

const obj2 = {
  b: 4,
  c: 3,
};

extend(obj1, obj2);
console.log(obj1); // --> {a: 1, b: 2, c: 3}
console.log(obj2); // --> {b: 4, c: 3}

살짝 기술 하나 알려줄께
객체에서 그 키값이 있냐 없냐을 알수 있는게 있어

let obj = {
  a:1,
  b:2,
  c:3
}
key in obj // false;
a in obj // true; 

알고 싶은 키를 넣어주고 in 해당객체
이렇게 하면 boolean 값으로 나타내줘 ㅇㅋ?

수도코드
1.객체2에 키값을 객체1에서 찾지못하면 그 키랑 값을 객체1에 넣어줘

function extend(obj1, obj2) {
  // TODO: 여기에 코드를 작성합니다.
  //obj2 키 값이 obj1에서 찾지못하면 obj1에 그 키랑 값을 넣어줘 
  for(let key in obj2){
    if(!(key in obj1)){
      obj1[key] = obj2[key]
    }
  }
}

위에 처럼 적어도 되고
좀 알아보기 힘들면

function extend(obj1, obj2) {
  // TODO: 여기에 코드를 작성합니다.
  //obj2 키 값이 obj1에서 찾지못하면 obj1에 그 키랑 값을 넣어줘 
  for(let key in obj2){
    if(obj1[key] === undefined){
      obj1[key] = obj2[key]
    }
  }
}

이렇게 적어도 똑같아 ㅇㅋ?


4번 문제

객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 마지막 요소를 리턴해야 합니다.number 타입의 값이어야 합니다.

예시

let output = countAllCharacters('banana');
console.log(output); // --> {b: 1, a: 3, n: 2}

입력된 문자열의 같은 문자가 있으면 갯수를 값으로 할당해줘~~ㅇㅋ?

난 처음에 문자열을 배열로 짤라서 순서대로 비교 하려고 했다.
하지만.....굳이 굳이 문자열은 인덱스 순서가 있기에...
안해도 된다.

function countAllCharacters(str) 
  // TODO: 여기에 코드를 작성합니다.
  // 문자열을 배열로 바꾸고 
  // 반복문으로 첫번째 인덱스 부터 계속 비교한다. 
  // 배열의 값이 객체의 키가 되고, 키의 해당하는 값을 카운터 해주세요. 
  // 만약에 해당 요소의 키 가 없으면 객체의 키를 1로 할당 해주세요. 
  // 그렇지 않으면, 해당요소가 키가 ++를 해주세요 
  let arr = str.split('');
  let obj = {};
  for(let i = 0; i < arr.length; i++){
    if(obj[arr[i]] === undefined){
      obj[arr[i]] = 1;
    }else {
      obj[arr[i]]++
    }
  } return obj;
}

두번쨰 풀이 어때?

객체에 아예 값을 넣어서 처음에 찾을수 없다고 하면 1을 할당해줘 라고 했다.

function countAllCharacters(str) {
  // TODO: 여기에 코드를 작성합니다.
  // 결과값을 넣을 객체를 선언해줘 
  // 문자열을 하나를 계속 다음꺼랑 비교하고 카운터 해주고 
  // 그 다음 문자열을 똑같이 해줘라 
  let result = {};

  for(let i = 0; i < str.length; i++){
    if(result[str[i]] === undefined){
      result[str[i]] = 1;
    }else{
      result[str[i]]++
    }
  }return result;
}

휠씬 깔끔하지? ㅋㅋ


5번문제

객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 마지막 요소를 리턴해야 합니다.

주의사항
띄어쓰기는 제외합니다.
가장 많이 반복되는 문자가 다수일 경우, 가장 먼저 해당 횟수에 도달한 문자를 리턴해야 합니다.
빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.

예시

let output = mostFrequentCharacter('apples not oranges');
console.log(output); // --> 'p'

output = mostFrequentCharacter('hello world');
console.log(output); // --> 'l'

앞문제랑 비슷해 보이지만 이 문제는 상당히 까다로워

왜냐하면

객체는 순서가 없거든 배열에서 가장 큰수 찾는 방법으로 편하게 찾을 수가 없어
참조자료형은 비교가 여러워

하지만. 언제나 해답은 있으니~~ 걱정마시게
물론 원시형으로 바꿔주는 메소드도 있어
하지만 이번에 어떤 원리에서 비교할 수 있는지 보여줄께

난 처음에 이렇게 풀었어
1.문자열을 배열로 바꾼다. 바꿀때 띄어쓰기를 없앤다.
2.배열을 두가지로 나눈다.
3.키를 나타내주는 배열과 카운터를 해주는 배열
4.카운터해주는 배열을 다시 비교해서 해당 키을 나타내주는 배열의 값을 리턴한다.

function mostFrequentCharacter(str) {
  // TODO: 여기에 코드를 작성합니다.
  // 객체마다 알파벳의 휫수를 할당하고, 
  // great 변수 선언해서 가장 큰 횟수를 찾아 
  // 반복문(for in) 활용해서 비교한다. 
  let arr = str.split(' ');
      arr = arr.join('');
      arr = arr.split('');

  let countObj = {}; 
  let greatestNum = 0;
  let greatestWord = '';

  for(let i = 0; i < arr.length; i++){
    if(countObj[arr[i]] === undefined){
      countObj[arr[i]] = 1;
    }else{
      countObj[arr[i]]++
    }
    if(greatestNum < countObj[arr[i]]){
      greatestNum = countObj[arr[i]];
      greatestWord = arr[i];
    }
  }return greatestWord;
}

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ창의적이지? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

두번쨰 풀이 갈께

function mostFrequentCharacter(str) {
  // TODO: 여기에 코드를 작성합니다.
  // 문자열의 띄어쓰기는 값은 건너뛰어줘 
  let countObj = {};
  let maxNum = 0;
  let maxStr = '';

  for (let i = 0; i < str.length; i++){
    if(str[i] === ' '){
      continue;
    }
    if(countObj[str[i]] === undefined){
      countObj[str[i]] = 1;
    }else{
      countObj[str[i]]++;
    }
  }
  for(let key in countObj){
    if(maxNum < countObj[key]){
      maxNum = countObj[key];
      maxStr = key;
    }
  }return maxStr;
}

위에서 치명적인 실수가 하나가 있어

반복문을 두번 사용했는데
주의 사항에 보면
가장 많이 반복되는 문자가 다수일 경우, 가장 먼저 해당 횟수에 도달한 문자를 리턴해야 합니다.

이말은 먼저 반복된걸 찾을거 리턴하라는 말이야

반복문을 두번 사용하면 맨 앞에 반복된걸 리턴하게 될꺼야

정답코드

function mostFrequentCharacter(str) {
  // TODO: 여기에 코드를 작성합니다.
  // 문자열의 띄어쓰기는 값은 건너뛰어줘 
  let countObj = {};
  let maxNum = 0;
  let maxStr = '';

  for (let i = 0; i < str.length; i++){
    if(str[i] === ' '){
      continue;
    }
    if(countObj[str[i]] === undefined){
      countObj[str[i]] = 1;
    } else {
      countObj[str[i]]++;
    }
    if(maxNum < countObj[str[i]]){
      maxNum = countObj[str[i]];
      maxStr = str[i];
    } 
  }
  return maxStr;
}

마지막 꿀팁또 줄께
객체는 비교하기 힘들잖아
그래서 아예 객체 안에 두개의 값을 먼저 할당하고 시작해

function mostFrequentCharacter(str) {
  let obj = { mostCount: 0, mostFrequent: '' };
  for (let i = 0; i < str.length; i++) {
    if (str[i] === ' ') {
      continue;
    }

    if (obj[str[i]] === undefined) {
      obj[str[i]] = 0;
    }
    obj[str[i]] += 1;

    if (obj[str[i]] > obj['mostCount']) {
      obj['mostCount'] = obj[str[i]];
      obj['mostFrequent'] = str[i];
    }
  }
  return obj['mostFrequent'];
}

이렇게도 가능해

뭐 방법은 여러가지야 ㅇㅋ?

그럼 다음 시간엔

중간 개념정리 살짝하고 함수 속 함수을 알아보자 ㅇㅋ?~

안녕

profile
야 나도 개발자 될 수 있어

0개의 댓글