javascript - 注释中带有 JSDoc 和 Immutable.js 数据结构

标签 javascript jsdoc immutable.js

我正在返回 Immutable.js List来自函数的数据结构。

PHPStorm 自动附加以下内容 @returns {*|List<T>|List<any>} .

Eslint 给我警告“T”类型的未解析变量。 在哪里可以找到 Immutable.js 注释的文档?

如何在 Eslint 中传递的列表的 @returns 注释形状中进行描述?

/**
 * @param n
 * @returns {*|List<T>|List<any>}
 */
const getList = (n) => {
  let list = Immutable.List()

  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      list = list.push(Immutable.List.of(i, j))
    }
  }

  return list
}

最佳答案

虽然我不熟悉 Immutable.js,但问题是 T是必须在文档中定义的模板。看,你的函数真正返回的是一个数字列表列表。所以T解析为 List<Number>并且您的固定文档将类似于:

/**
 * @param {Number} n
 * @return {List<List<Number>>}
 */

你可以去掉 *List<any>作为可能的返回类型,因为您的函数显然总是返回数字列表的列表。

就是这样。


关于算法复杂度

附带说明,请记住您编写的函数的处理时间随参数 n 呈二次方增长。 .如果您发现自己经常调用传递相同值的函数,请考虑记住它的返回值:

const memoizedLists = new Map();

/**
 * @param {Number} n
 * @return {List<List<Number>>}
 */
function getList(n) {
    // try to find a previous run for this same value
    let result = memoizedLists.get(n);

    if (!result) {
        // compute it otherwise
        result = Immutable.List();

        for (let i = 0; i < n; i++) {
            for (let j = 0; j < n; j++) {
                result.push(Immutable.List.of(i, j));
            }
        }

        // memoize it for a future invocation
        memoizedLists.set(n, result);
    }

    return result;
}

此外,不仅时间而且内存使用量也在呈二次方增长。根据您使用它的方式,您可能希望将您的函数变成一个生成器函数,这将“神奇地”使其使用常量空间,即,无论有多大 n获取,您的函数将继续使用相同数量的内存。这是你的函数变成了生成器函数:

/**
 * @generator
 * @param {Number} n
 * @yields {List<Number>}
 */
function *getList(n) {
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            yield Immutable.List.of(i, j);
        }
    }
}

为了能够将其用作生成器,您需要按需调用它。例如,如果您将这些数字对打印到某些输出:

for (const pair of getList(4)) {
    console.info(`...and here comes another pair: [${pair}]`);
}

关于javascript - 注释中带有 JSDoc 和 Immutable.js 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309123/

相关文章:

jsdoc - "valid"JSDoc 是否需要星号?

javascript - 为什么 immutable.js 类不需要 "new"?

javascript - AngularJS 服务中的 JSDoc

javascript - JSDoc 中的文档重载函数

javascript - map() 函数内的索引

javascript - 用于提升 React 性能的 Immutable.js 替代方案

javascript - 使用 NodeJS 查找图像中是否存在 Logo

javascript - 如何正确使用 forEach 或拼接

javascript - 在 jQuery UI 工具提示中获取对悬停元素的引用

javascript - JSON 按字母顺序排序