是否可以让一个对象的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
我正在尝试解决以下问题:(不是作业问题,只是面试练习)。
创建一个接受一个参数(一个函数)和 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