함수 수준에서 JS의 메모이제이션
2030 단어 reactwebdevjavascriptangular
문제를 먼저 설명하고,
두 숫자의 합을 구하는 함수가 주어졌다고 가정해 봅시다.
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))
=> 미리 계산된
삼
이것이 바로 이것이 당신이 이것을 달성할 수 있는 한 가지 방법입니다. 나는 당신이 다른 방법도 가질 수 있다고 확신합니다.
안녕히 계세요!
해피코딩 !!😁😁😁
Reference
이 문제에 관하여(함수 수준에서 JS의 메모이제이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vishal1025/memoization-in-js-at-function-level-4gfk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)