我正在尝试用 javascript 重写 memoize(用于下划线),有人可以解释一下吗?

米洛斯

我知道 memoize 的目的是缓存值,因此不必每次都重新计算相同的答案,从而可以更快地运行代码。我的问题源于返回一个函数(我认为)。google chrome 调试器在这里对我来说不是那么有用,因为每次我尝试运行这个 memoize 函数时,它只是从 argus 变量(我相信在第 4 行)一直到分号。此外,result 总是返回一个空对象,而不是在 result 中存储一个值。

我首先定义一个函数:

function add(a,b){
  return a+b;
}

这是我对 memoize 功能的尝试:

  _.memoize = function(func) {

    var result = {};
    var flag = 0;
    var argus = Array.prototype.slice.call(arguments)
    return function() {
        
        if(result[key] === arguments){
            flag = 1
        }
        else if(flag = 0){
          result[argus] = func.apply(this, argus);
        }
        
      return result[argus];
    };
  };

我会通过做_.memoize(add(2,5))来调用备忘录,但结果不会存储在结果对象中。

我是否接近让这个记忆功能正常工作?大家可以在这里提供任何指导,我们将不胜感激。

金利来

您缺少的最大一点是首先_.memoize函数上调用它,然后它返回一个新函数。您正在根据函数调用结果7在本例中为数字调用它

为了让它工作,你需要重新安排一些事情。

另请注意,尝试使用数组本身作为对象的索引是不明智的。解决这个问题的一种方法是将参数数组转换为 JSON 并将其用作results对象的索引

function add(a, b) {
  console.log('Called add(' + a + ', ' + b + ')');

  return a + b;
}

var _ = {};

_.memoize = function(func) {
  var results = {};
  return function() {
    var args = Array.prototype.slice.call(arguments);
    var key = JSON.stringify(args);

    if (!(key in results)) {
      results[key] = func.apply(this, args);
    }

    return results[key];
  };
};

var madd = _.memoize(add);

console.log(madd(2, 4));
console.log(madd(9, 7));
console.log(madd(2, 4));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Javascript - 有人可以向我解释一下这是做什么的吗?

有人可以解释一下这段javascript代码在做什么吗?

有人可以解释一下为什么我们在 javaScript 中的条件周围使用括号

有人可以向我解释一下:“ create({email:emailArg} = {}){}”吗?

有人可以向我解释一下这段代码是如何工作的吗?

有人可以向我解释一下吗?

有人可以帮我解释一下银行选择登记的概念吗?

我对这个逻辑感到困惑,有人可以解释一下吗

有人可以向我解释一下 ReactJS 的这段代码吗?

请有人帮我解释一下这个javascript代码是什么意思?

有人可以解释一下这个简单的 javascript (ES6) 行对箭头函数的作用吗?

有人可以帮我解释一下我的C代码有什么问题吗?

有人可以向我解释一下LinkedList程序中的C ++代码吗?

线程中断。有人可以解释一下我的输出以更好地理解中断吗?

有人可以给我解释一下二叉树的递归代码吗?

有人可以给我解释一下如何以及何时在oracle中使用syscursor吗?

JAVA有人可以帮我解释一下此代码吗?自动发电

有人可以解释一下我如何用此代码调用ridgedbody2d吗?

这个C代码的输出是49,但是有人可以向我解释一下吗?

我在建立联系表格时遇到问题,有人可以解释一下吗?

有人可以向我解释一下Java中的哨兵功能吗?或它是如何工作的?

有人可以向我简要解释一下 std::streampos 是什么吗?

我正在尝试用 javascript 编写一个 while 循环。我的 console.log 没有打印请求的消息

奇怪的代码...有人可以向我解释一下

有人可以解释一下return语句如何在javascript中与递归一起工作吗?

为什么我的嵌套循环没有继续到下一行代码?有人可以解释一下吗?

有人可以解释一下“自动分号插入”如何影响 javaScript 中的“空语句”

我正在尝试用php回显javascript

有人可以解释一下使用通道的Go代码块吗?我不知道它一次执行500次动作的方式