함수 수준에서 JS의 메모이제이션

최근에 함수 수준에서 간단한 메모이제이션을 달성해야 하는 흥미로운 문제가 발생했습니다.

문제를 먼저 설명하고,

두 숫자의 합을 구하는 함수가 주어졌다고 가정해 봅시다.

add = (a, b) => {
 return a,b
}


함수를 작성해야 합니다. 함수를 받는 memoize를 가정해 봅시다.

function memoize(func) {}


문제에 대한 입력

let mem = memoize(add);
console.log(mem(1,2)) => 3
console.log(mem(2,4)) => 6
console.log(mem(1,2)) => 3


따라서 문제는 출력을 반환하기 위해 메모화 기능을 완료해야 하지만 캐치는 입력 매개변수가 이미 계산되고 있는 경우 다시 계산할 필요가 없다는 것입니다.

해결책

자, JS의 핵심 개념을 수정해 보겠습니다. 즉, 모든 기능은 궁극적으로 JS의 객체입니다.🧐🧐

memoize 함수에서 이 개념을 어떻게 사용할 수 있는지 생각해 봅시다.

function memoize(func) {

  // Since, we can have a property in objects, right?
  if(!memoize.preInputs) {
    memoize.preInputs = []
  }

return function() {
        for(let i = 0; i < memoize.preInputs.length; i++) {
          if((memoize.preInputs[i]['arg1'] === arguments[0] && 
            memoize.preInputs[i]['arg2'] === arguments[1]) || 
            (memoize.preInputs[i]['arg1'] === arguments[1] && 
            memoize.preInputs[i]['arg2'] === arguments[0])) {
            console.log('precomputed');
            return memoize.preInputs[i]['result'];
          } 
         }
         memoize.preInputs.push({
              arg1: arguments[0],
              arg2: arguments[1],
              result: func(arguments[0], arguments[1])
            });
         console.log('newly calculated');
         return memoize.preInputs[memoize.preInputs.length - 1].result;
        }


이제 출력을 사용해 보겠습니다.
console.log(mem(1,2))
=> 새로 계산됨

console.log(mem(3,4))
=> 새로 계산됨
7
console.log(mem(1,2))
=> 미리 계산된


이것이 바로 이것이 당신이 이것을 달성할 수 있는 한 가지 방법입니다. 나는 당신이 다른 방법도 가질 수 있다고 확신합니다.

안녕히 계세요!
해피코딩 !!😁😁😁

좋은 웹페이지 즐겨찾기