문제풀이_객체

future·2020년 12월 15일
0

문제풀이

목록 보기
4/6

#select

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

  • 입력받은 객체에 존재하지 않는 키는 무시
  • 입력받은 객체를 수정하지 않음
function select(arr, obj) {

1. 최종 리턴해줄 새 객체를 선언해준다.

  let newObj = {};

2. 배열의 요소 중에 객체의 key가 있는지 확인하기 위해 이중 for문을 사용해준다.
배열의 첫 요소부터 마지막 요소까지 순회하면서, 객체의 key 또한 순회하도록 한다.

3. 만약 배열의 요소와 key가 같을 경우, 빈 객체 newObj에 기존 객체의 속성을 할당해준다.

  for (let i = 0; i < arr.length; i++) {
    for (let key in obj) {
      if (key === arr[i]) {
        newObj[key] = obj[key];
      }
    }
  }
  return newObj;
}

#getValueOfNthElement

배열과 수를 입력받아 수가 가르키는 인덱스에 해당하는 객체의 'name' 속성값을 리턴해야 한다.

  • 빈 배열을 입력받은 경우 'no name'을 리턴
  • 배열의 범위를 벗어나는 인덱스를 입력받은 경우, 마지막 객체의 'name' 속성값을 리턴
function getValueOfNthElement(arr, num) {

1. 만약 빈 배열을 입력받은 경우 'no name'를 리턴해준다.

  if (arr.length === 0) {
    return 'no name';
    
2. 혹은 만약 num이 배열의 길이를 벗어나는 경우, 마지막 요소(객체)의 'name' value 값을 리턴한다.

  } else if (arr.length <= num) {
    return arr[arr.length - 1]['name'];

3. 위의 두 조건 모두 해당되지 않는 경우,
num번째 인덱스에 있는 요소(객체)의 'name' 속성값을 리턴해준다. 

  } else {
    return arr[num]['name'];
  }
}

#extend

두 개의 객체를 입력받아 두번째 객체의 속성들을 첫번째 객체에 추가해야 한다.

  • 추가하려는 속성이 이미 첫번째 객체에 존재하는 경우, 기존 값을 그대로 둠
  • 두번째 객체는 수정하지 않음
function extend(obj1, obj2) {

1. 두번째 객체의 key를 살펴보고, 두번째 객체에서 첫번째 객체의 key가 없을 경우를 찾는다.

2. obj2의 key를 순회해주는 반복문에서 obj1의 key를 찾지 못했을 경우

3. obj1에 obj2의 속성을 할당해준다.

  for (let key in obj2) {	// obj2의 key를 순회해주는 반복문
    if (!(key in obj1)) {	// 저 반복문에서 obj1의 key가 없을 때
      obj1[key] = obj2[key]	// obj1에 obj2의 속성을 할당해줌
    }
  }
}

#countAllCharacters

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

  • 빈 문자열을 입력받은 경우 빈 객체를 리턴
function countAllCharacters(str) {

1. 문자열을 구성하는 각 문자를 키로 갖기 위한 빈 객체를 먼저 선언해준다.

  let obj = {};

2. 빈 문자열을 입력 받은 경우에는 빈 객체를 리턴한다.

  if (str === '') {
    return obj;
  }

3. 문자열을 순회해줄 반복문을 만들어준다.

4. 처음에 나온 문자는 빈 객체 obj 안에 포함되어 있지 않기 때문에, 첫 key를 만들어 0을 할당해준다.
(처음에는 value 값을 할당해주기 전에 obj에 str[i]라는 key 값을 먼저 추가)

  for (let i = 0; i < str.length; i++) {
    if (obj[str[i]] === undefined) {  	
      obj[str[i]] = 0;
    }

5. 조건문을 빠져나온 경우는 obj에 key가 있을 때라는 뜻이다.
obj에 key가 존재할 경우에는 value 값을 1씩 더해준다.

    obj[str[i]] = obj[str[i]] + 1;	// obj에 key가 있는 경우
  }
  return obj;

}

#mostFrequentCharacter

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

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

1. 빈 객체에 key(문자)와 value(횟수)를 할당해 준 다음 비교를 해보려고 한다.
비교 대상이 될 빈 문자열이 할당된 변수와 0이 할당된 변수를 각각 선언해준다.

  let obj = {};
  let largestStr = '';
  let largestNum = 0;

2. 만약 빈 문자열을 입력 받은 경우에는 빈 문자열을 리턴해준다.

  if (str.length === 0) {
    return '';
  }

3. 문자열을 순회하는 반복문을 작성하고, 문자는 띄어쓰기가 아니라는 전제조건을 만들어준다.

  for (let i = 0; i < str.length; i++) {
    if (str[i] !== ' ') {   		
    
4. 처음에 나온 문자는 빈 객체 obj 안에 포함되어 있지 않기 때문에, 첫 key를 만들어 0을 할당해준다.
(처음에는 value 값을 할당해주기 전에 obj에 str[i]라는 key 값을 먼저 추가)

      if (obj[str[i]] === undefined) {
        obj[str[i]] = 0;
      }
      
5. obj에 key가 존재할 경우에는 value 값을 1씩 더해준다.

      obj[str[i]] = obj[str[i]] + 1;

6. 이제 객체 obj 안에는 key(문자)와 value(해당 문자의 횟수)가 할당되어 있을 것이다.
조건문을 이용하여 value 값이 largestNum(0)보다 클 경우, largestNum에 해당 value 값을 할당해준다.
그리고 largestStr에는 해당 value를 가지고 있는 key(문자)를 할당해준다.
아직 반복문 안에 있기 때문에 마지막 문자까지 순회하게 되면 가장 횟수가 많은 문자를 찾을 수 있다.

      if (obj[str[i]] > largestNum) {
        largestNum = obj[str[i]];
        largestStr = str[i];
      }
    }
  }

7. 반복문이 끝나면 가장 카운팅이 많이 된 문자가 할당된 largestStr을 리턴해준다.

  return largestStr;
}
profile
get, set, go!

0개의 댓글