SOURCE

// 在题目14. 实现memo()中,你实现了一个memo函数但并不考虑空间成本。

// 现实项目中,cache如果无限量使用的话可能会导致内存不足,所以最好加上一些限制。

// 比如memoize-one 做的就是,仅缓存上一次的结果。

// 请自行实现memoizeOne(),其接受两个参数:

// 求结果的函数
// (可选) 判断当前和上次的调用参数是否equal的函数
// 默认的equal 判断函数的话,用===直接对于数组元素进行比较即可。

function memoizeOne(fn,isEqual) {
    let lastArgs = null;
    let lastResult = null;

    const defaultEqual = (prev,next) => {
        if(prev.length !== next.length) return false;

        for(let i = 0;i < prev.length;i++) {
            if(prev[i] !== next[i]) {
                return false;
            }
        };

        return true;
    };

    const equalFn = isEqual ? isEqual : defaultEqual;

    const memoized = (...args) => {
        if(lastArgs !== null && equalFn(lastArgs,args)) {
            return lastResult;
        };

        const result = fn(...args);
        lastArgs = [...args];
        lastResult = result;

        return result;
    };

    return memoized;
}
console 命令行工具 X clear

                    
>
console