20년 8월 22일(토)_TIL

Ji Hwan - Ryu·2020년 8월 22일
0

TIL

목록 보기
27/38

오늘 배운 것

  • underbar 과제 : difference, memoize 함수 구현

느낀 점

  • memoize함수 구현 중,
  _.memoize = function(func) {
    let memo = {};

    return function(){
      let key = Array.prototype.join.call(arguments, ',')
      if(key in memo){
        return memo[key];
      }
      else{
        memo[key] = func(...arguments);
        return memo[key];
      }
    }
  };

위의 코드에서 서로 다른 인자를 받았을 시 저장되어 있는 값을 불러내지 않고 func(...arguments)를 실행해야 함에도, [1, 2, 3]을 인자로 받아 실행 후 (1, 2, 3)을 인자로 받으면 저장되어 있는 값을 불러내어 실행되었다. 원인을 알아보니

let key = Array.prototype.join.call(arguments, ',')

위의 코드를 실행할 시 두 인자 모두 key가 "1,2,3"이 된다는 것을 파악했다. 이를 해결하기 위해 JSON.stringify를 사용하여,

_.memoize = function(func) {
    let memo = {};

    return function(){
      let key = JSON.stringify(arguments);
      if(key in memo){
        return memo[key];
      }
      else{
        memo[key] = func(...arguments);
        return memo[key];
      }
    }
  };

위의 코드로 작성하여 모든 검사가 정상적으로 통과되었다. JSON의 유용함을 느꼈고, 앞으로도 잘 활용해야겠다는 생각이 들었다.

내일 할 일

  • underbar advanced 과제 마무리

  • recursion advanced 과제

0개의 댓글