부트캠프/TIL

코드스테이츠 프론트엔드 부트캠프 Day 12 - 객체 연습문제

하이고니 2022. 12. 30. 18:20

removeNumberValues

문제

객체를 입력받아 number 타입의 값을 갖는 속성을 모두 제거해야 합니다.

입력

인자 1 : obj

  • 임의의 속성을 갖는 객체

출력

  • 별도의 리턴문(return statement)을 작성하지 않습니다.

입출력 예시

const obj = {
  a: 2,
  b: 'remaining',
  c: 4,
};

removeNumberValues(obj);
console.log(obj); // --> { b: 'remaining' }

힌트

  • 자바스크립트에서 object를 순회하는 방법을 검색해 봅니다. (js how to iterate object) for...in 외에 object 순회를 할 수 있는 방법이 있을까요?

나의 코드

function removeNumberValues(obj) {
  // 함수의 매개변수에 프로퍼티가 없을 때 어떻게 불러올 것인가?
  // for...in 문에서 let prop 해버리면 됨
for (let prop in obj) {
    if (typeof (obj[prop]) === 'number') {
      delete obj[prop];
    }
  }
}

// Object.entries() 알아보기

getAllButLastElementOfProperty

문제

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

입력

인자 1 : obj

  • 임의의 객체

인자 2 : key

  • string 타입의 키

출력

  • 배열을 리턴해야 합니다.

주의 사항

  • 주어진 키에 해당하는 값이 배열이고, 빈 배열이 아닌 경우에만 마지막 요소가 제거된 배열을 리턴해야 합니다.
  • 그 외의 경우, 빈 배열을 리턴해야 합니다.
  • 입력받은 객체를 수정하지 않아야 합니다.

입출력 예시

const obj = {
  key: [1, 2, 3],
};

let output = getAllButLastElementOfProperty(obj, 'key');
console.log(output); // --> [1,2]

나의 코드

function getAllButLastElementOfProperty(obj, key) {
  
  let newObj = JSON.parse(JSON.stringify(obj)) // 객체 깊은 복사. 원본은 그대로 두고 복사된 애를 변경

  if (!Array.isArray(newObj[key]) || !newObj[key].length) return []
  else newObj[key].pop()

  return newObj[key]

}

 

 

[JavaScript] 자바스크립트객체 복사하기 (앝은 복사, 깊은 복사)

자바스크립트객체(Object)는 Key(키):Value(값)의 1개 또는 여러 쌍으로 구성됩니다. Value(값)에는 숫...

blog.naver.com

 


countAllCharacters

문제

문자열을 입력받아 문자열을 구성하는 각 문자(letter)를 키로 갖는 객체를 리턴해야 합니다. 각 키의 값은 해당 문자가 문자열에서 등장하는 횟수를 의미하는 number 타입의 값이어야 합니다.

입력

인자 1 : str

  • string 타입의 공백이 없는 문자열

출력

  • 각 문자를 키로 갖는 객체를 리턴해야 합니다.

주의 사항

  • 빈 문자열을 입력받은 경우, 빈 객체를 리턴해야 합니다.

입출력 예시

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

나의 코드

function countAllCharacters(str) {

  // 입력: 문자열 => 'banana'
  // 출력: 객체 => {b: 1, 1: 3, n: 2} => { 문자열의 각 문자: 나온 횟수}
  
  // 1. 리턴할 객체를 만든다.
  // 2. str의 모든 문자열을 순회하는 반복문을 만든다.
    // 2-1. if 현재 보고 있는 문자가 아직 키로 생성되지 않았을 때
    // 2-2. 그 문자를 키로, 값을 0으로 한 객체를 만든다. 
  // 3. 문자가 등장할 때마다 1씩 증가시킨다.    
  
  let obj = {}
  for(i = 0; i < str.length; i++) {
    if(!(str[i] in obj)) {
      obj[str[i]] = 0
    } obj[str[i]] ++
    
  }

  return obj
}

mostFrequentCharacter

문제

문자열을 입력받아 가장 많이 반복되는 문자(letter)를 리턴해야 합니다.

입력

인자 1 : str

  • string 타입의 공백이 있는 문장

출력

  • string 타입을 리턴해야 합니다.

주의 사항

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

입출력 예시

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

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

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

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

output = mostFrequentCharacter('abba');
console.log(output); // --> 'b'

나의 코드

function mostFrequentCharacter(str) {

  // 입력: 문자열 => 'banana'
  // 출력: 객체 => {b: 1, 1: 3, n: 2} => { 문자열의 각 문자: 나온 횟수}
  
  // 1. 리턴할 객체를 만든다.
  // 2. str의 모든 문자열을 순회하는 반복문을 만든다.
    // 2-1. if 현재 보고 있는 문자가 아직 키로 생성되지 않았을 때
    // 2-2. 그 문자를 키로, 값을 0으로 한 객체를 만든다. 
  // 3. 문자가 등장할 때마다 1씩 증가시킨다.   
  
  // 반복문 돌리다가 공백이 나오면 건너뛴다.
  	// break 공백이 나오면 반복문 종료
	// continue 이번 횟수만 건너뛴다.

  // mostCount 보다 obj[str[i]]가 크면 대체
  // obj[str[0]] b: 1 이므로 mostCount = 1
  // obj[str[1]] a: 3 이므로 mostCount = 3
  // obj[str[2]] n: 2 이므로 mostCount = 3

  let obj = {}
  let mostCount = 0
  let mostChar = ''

  for(i = 0; i < str.length; i++) {
    if(str[i] === ' ') {
      continue
    }
    if(!(str[i] in obj)) {
      obj[str[i]] = 0
    } obj[str[i]] ++
      if(mostCount < obj[str[i]]) {
        mostCount = obj[str[i]]
        mostChar = str[i]
      }
  }
  return mostChar
}