gpt4 book ai didi

javascript - 无法理解 memoize 实现

转载 作者:行者123 更新时间:2023-11-30 10:02:00 25 4
gpt4 key购买 nike

answerKey[parameters] 是如何工作的?如果 Array.prototype.slice.call(arguments)返回一个数组[157, 687],answerKey[parameters]是否存储一个数组作为key?

function memoize(mathProblem) {
var answerKey = {};

return function(){
var parameters = Array.prototype.slice.call(arguments);

if (answerKey[parameters]) {
console.log('returning cached');
return answerKey[parameters];
} else {
answerKey[parameters] = mathProblem.apply(this, arguments);

return answerKey[parameters]
}
}
};

var multiply = function(a, b){
return a*b;
}

var memoMultiply = memoize(multiply);

console.log(memoMultiply(157, 687));
=>
107859

console.log(memoMultiply(157, 687))
=>
returning cached
107859

最佳答案

方括号表示法将数组转换成字符串

var answerKey = {};
var params = [157, 687];
answerKey[params] = 107859;
answerKey['157,687']; // 107859

所以是的,关键是作为字符串的数组内容。这不是很好的做法。

已请求编辑

一般来说,我尽量避免依赖于从 Array.prototype.toString() 创建的字符串,因为它有一些奇怪的行为

例如。嵌套数组被展平

[2, [3, 4], 5].toString(); // '2,3,4,5'

这正在丢失有关源数组的信息并且与

[2, 3, 4, 5].toString();

为了解决这些问题,我建议通过 JSON.stringify();

传递数组
JSON.stringify([2, [3, 4], 5]); // '[2,[3,4],5]'
JSON.stringify([2, 3, 4, 5]); // '[2,3,4,5]'

此示例将与 .toString(); 一起使用,但我认为这是一个坏习惯。

关于javascript - 无法理解 memoize 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31091650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com