是否可以让一个对象的key多一个词?

Is it possible to make the key of an object more than one word?

我正在尝试解决以下问题:(不是作业问题,只是面试练习)。

创建一个接受一个参数(一个函数)和 returns 函数的函数“fastCache”。调用 fastCache 时,它​​会创建一个对象来跟踪对 returned 函数的调用,其中 returned 函数的每个输入都与其输出相关联。使用相同参数对该 returned 函数的每次后续调用都将 return 直接从对象输出,而不是再次调用原始函数。

当输入只是一个参数时,我能够解决这个问题。但是对于下面的例子,我不知道该怎么做:L

// // MULTIPLE ARGUMENTS CASE
const sumMultiplyBy2 = (num1, num2) => 2 * (num1 + num2);
const cachedSumMultiplyBy2 = fastCacheMult(sumMultiplyBy2);
console.log(cachedSumMultiplyBy2(5, 10)); // -> 30
console.log(cachedSumMultiplyBy2(1, 2)); // -> 6
console.log(cachedSumMultiplyBy2(5, 10)); // -> 30 // from the cache object
// */

这是我为单参数情况编写的代码:

const fastCache = (callback) => {
    const obj = {};
    return (input) => {
        if (input in obj) {
            console.log("from cache");
            console.log(obj);
            return obj[input];
        }
        else {
            obj[input] = callback(input);
            return callback(input);
        }
    }
}

iplyBy2 = num => num * 2;
const cachedMultiplyBy2 = fastCache(multiplyBy2);
console.log(cachedMultiplyBy2(100)); // -> 200
console.log(cachedMultiplyBy2(150)); // -> 300
console.log(

我想这就是您要找的:

function add(...numbers) {
    return numbers.reduce((accumulator, current) => {
        return accumulator += current;
    });
};



function sumMultiplyBy2(numbers){
      return add(numbers) * 2
   }
 
sumMultiplyBy2(200) //400
sumMultiplyBy2(100,50) //300

所以我尝试按照评论中的建议加入参数并得到一个工作代码:

const fastCacheMult = (callback) => {
    const obj = {};
    return (...inputs) => {
        if (inputs.join('') in obj) {
            console.log("from cache");
            return obj[inputs.join('')];
        }
        obj[inputs.join('')] = callback(...inputs);
        return callback(...inputs);
    }
}


const sumMultiplyBy2 = (num1, num2) => 2 * (num1 + num2);
const cachedSumMultiplyBy2 = fastCacheMult(sumMultiplyBy2);
console.log(cachedSumMultiplyBy2(5, 10)); //30
console.log(cachedSumMultiplyBy2(1, 2)); //6
console.log(cachedSumMultiplyBy2(5, 10)); //30

不过,我还发现我可以只使用 rest 参数,它适用于单个和多个参数:

function fastCacheMult(callback) {
  let obj = {};
  return function (...inputs) {
    if (obj[inputs]) {
      console.log("from cache");
      return obj[inputs];
    }
    obj[inputs] = callback(...inputs);
    return obj[inputs];
  }
}


const sumMultiplyBy2 = (num1, num2) => 2 * (num1 + num2);
const cachedSumMultiplyBy2 = fastCacheMult(sumMultiplyBy2);
console.log(cachedSumMultiplyBy2(5, 10)); // -> 30
console.log(cachedSumMultiplyBy2(1, 2)); // -> 6
console.log(cachedSumMultiplyBy2(5, 10)); // -> 30 // from the cache object