본문 바로가기
패스트캠퍼스/수업내용정리

2019-05-17 this와 각종 예제들

by sunnykim91 2019. 5. 17.

 

Object.prototype.__proto__ 는 null이다.

const parent = { a: 1};
// const child = {}

const child = Object.create(parent);

console.log(child);  // {}
console.log(child.a);  // 1

 

정적메소드는 this를 쓰지 않는다.

 

function getMaxValueFromArray(array){
  // return Math.max.apply(null, array); // null자리에는 this가 오려고 보니까, Math는 정적이기때문에 this를 쓰지 않는다. 
  return Math.max.apply(...array);
}

console.log(getMaxValueFromArray([3, 6, -2, -5, 7, 3])); // 7

function getMinValueFromArray(array) {
  return Math.min.apply(null, array); 
}
console.log(getMinValueFromArray([3, 6, -2, -5, 7, 3])); // -5

// apply는 두번쨰 인자가 배열 , 호출할 함수들에게 전달할 인수들의 리스트 
// call함수는 두번째 부터 인수가 리스트를 ,로 구분
// apply와 call의 하는 일은 같다.

 

 

// 4. 문자열 내 p와 y의 개수
// numPY함수는 대문자와 소문자가 섞여있는 문자열 s를 인수로 전달받는다.
// s에 존재하는 'p'의 개수와 'y'의 갯수를 비교해 같으면 true, 다르면 false를 리턴하도록 함수를 완성하라.
// 대소문자를 구별하지 않으며 'p', 'y' 모두 하나도 없는 경우는 항상 true를 리턴한다.

// 예를 들어 s가 'pPoooyY'면 true를 리턴하고 'Pyy'라면 false를 리턴한다.

function numPY(s) {
  const str = s ? s.toUpperCase() : '';

  let pCount =0;
  let yCount =0;
  
  for(let i=0;i<str.length;i++){
    if(str[i] === 'P') pCount++;
    if(str[i] === 'Y') yCount++;
  }
  return pCount === yCount
}

console.log(numPY('pPoooyY')); // true
console.log(numPY('Pyy'));     // false
console.log(numPY('ab'));      // true
console.log(numPY(''));        // true
console.log(numPY());          // true

 

 

// 5. 이상한 문자만들기
// toWeirdCase함수는 문자열을 인수로 전달받는다.문자열 s에 각 단어의 짝수번째 인덱스 문자는 대문자로, 
// 홀수번째 인덱스 문자는 소문자로 바꾼 문자열을 리턴하도록 함수를 완성하라.

// 예를 들어 s가 'hello world'라면 첫번째 단어는 'HeLlO', 두번째 단어는 'WoRlD'로 바꿔 'HeLlO WoRlD'를 리턴한다.

//   주의) 문자열 전체의 짝 / 홀수 인덱스가 아니라 단어(공백을 기준)별로 짝 / 홀수 인덱스를 판단한다.

function toWeirdCase(s) {
  let str = s.split(' ');
  let result = '';
  for(let i=0;i<str.length;i++){
    for(let j=0;j<str[i].length;j++){
      if(j%2===0) result += str[i][j].toUpperCase();
      else result += str[i][j];
    }
    result += ' ';
  }
  return result;
}

console.log(toWeirdCase('hello world'));    // 'HeLlO WoRlD'
console.log(toWeirdCase('my name is lee')); // 'My NaMe Is LeE'

 

// 핸드폰 요금 고지서에 표시할 전화번호는 개인정보 보호를 위해 맨 뒷자리 4자리를 제외한 나머지를 * 으로 바꿔야 한다.
// 전화번호를 나타내는 문자열 str을 입력받는 hideNumbers 함수를 완성하라
// 예를들어 s가 ‘01033334444’면 ******* 4444를 리턴하고, ‘027778888’인 경우는 ***** 8888을 리턴한다.

function hideNumbers(str) {
  let result = '';
  for (let i = 0; i < str.length - 4; i++) {
    result += str[i].replace(str[i], '*');
  }
  for (let i = str.length - 4; i < str.length; i++) {
    result += str[i];
  }
  return result;
}

console.log(hideNumbers('01033334444')); // *******4444
console.log(hideNumbers('027778888')); // *****8888

 

반응형