JSON.stringify如何使memoize函数工作?

时间:2016-12-07 15:54:50

标签: javascript

   _  .memoize = function(func) {
  var hash = {};
    return function() {
      var arg = JSON.stringify(arguments);
      if (hash[arg] === undefined) {
        hash[arg] = func.apply(this, arguments);
      }
      return hash[arg];
    };
  };

你好,

我正在尝试实现memoize下划线功能。我对JSON.stringify有疑问。

if statement中,arg检查hash中是否已存在JSON.stringify。为什么使用arg可以检查hash中是否存在输入arguments。我的意思是如果我们传递JSON.stringify数组而不使用JSON.stringify转换它们,那么我们无法检查,因为我们传递的是整个数组。但是,在使用JSON.stringify时,它会使其正常工作。那么weights如何才能检查?

1 个答案:

答案 0 :(得分:0)

这是因为只有字符串可以用作javascript对象中的键。 例如:

var key = {a:1};
var map = {};
map[key] = 1; 
// {'[object Object]': 1}

这将导致每个参数组合在同一个键中为saved

使用JSON.stringify将参数列表转换为唯一字符串,该字符串又可用作唯一对象键。

var key = {a:1};
var map = {};
map[JSON.stringify(key)] = 1; 
// {'{"a":1}': 1}

这样,每次使用相同的参数调用函数时,JSON.stringify将返回相同的唯一字符串,您可以使用它来检查是否已经为该组参数设置了缓存结果,如果所以,返回缓存的值。