将三元运算符转换为if

时间:2019-05-23 22:37:29

标签: javascript

这是一个琐碎的问题,但是我很难将ternary运算符转换为if。这是我尝试过的。

function memoize(fn) {
  const cache = {};
  return (...args) => {
    const stringifiedArgs = stringifyArgs(args);
    const result = (cache[stringifiedArgs] = !cache.hasOwnProperty(
      stringifiedArgs
    )
      ? fn(...args)
      : cache[stringifiedArgs]);
    return result;
  };
}

// function memoize(fn) {
//   const cache = {};
//   return (...args) => {
//     const stringifiedArgs = stringifyArgs(args);
//     return result = (if (cache[stringifiedArgs] = !cache.hasOwnProperty(stringifiedArgs)) {
//       fn(...args);
//     } else {
//       cache[stringifiedArgs];
//     })
//   };
// }

2 个答案:

答案 0 :(得分:4)

这是我能得到的最干净的-检查属性并将备注函数的结果保存在缓存中(如果不存在)。然后从缓存中返回它。

function memoize(fn) {
  const cache = {};
  return (...args) => {
    const stringifiedArgs = stringifyArgs(args);
    
    if (!cache.hasOwnProperty(stringifiedArgs)) {
      cache[stringifiedArgs] = fn(...args);
    }
      
    return cache[stringifiedArgs];
  };
}

您还可以在此处非常安全地使用in运算符:

function memoize(fn) {
  const cache = {};
  return (...args) => {
    const stringifiedArgs = args.join(`,`); // just for testing

    if (!(stringifiedArgs in cache)) {
      cache[stringifiedArgs] = fn(...args);
    }

    return cache[stringifiedArgs];
  };
}

const fib = memoize(n => n < 2 ? n : fib(n - 1) + fib(n - 2));
console.log(fib(78));

答案 1 :(得分:1)

如果您想要保持相同的结构,则可能需要一个实例。但是,这不是最干净的方法...

PROPAGATE_EXCEPTIONS