代码之家  ›  专栏  ›  技术社区  ›  sdgfsdh

是否可以在没有变量的情况下创建for-of循环?

  •  11
  • sdgfsdh  · 技术社区  · 7 年前

    假设我有这样一个函数:

    const hasAny = xs => {
      for (const x of xs) {
        return true;
      }
    
      return false;
    };
    

    会抱怨 x

    我可以写一个不声明任何变量的for-of循环吗?

    3 回复  |  直到 7 年前
        1
  •  13
  •   T.J. Crowder    7 年前

    不,你不能,一般情况下不行。不过,您可以直接使用迭代器:

    const hasAny = xs => !xs[Symbol.iterator]().next().done;
    

    或者,如果您想确保主动释放迭代器所拥有的任何资源(而不是等待它们被自动释放——想想生成器函数或类似函数中的DB connection),主动调用 return 如果它能提供 返回 for-of 在封面下:

    const hasAny = xs => {
        const it = xs[Symbol.iterator]();
        const result = !it.next().done;
        if (it.return) it.return();
        return result;
    };
    

    实例:

    const hasAny = xs => !xs[Symbol.iterator]().next().done;
    
    console.log(hasAny([]));  // false
    console.log(hasAny([1])); // true

    如果您确定迭代器的第一个值 null undefined ,你能做到的 this destructuring trick

    对于那些不知道的人,

        2
  •  2
  •   Community Mohan Dere    6 年前

    根据ESLint的问题 #2173 ,可以将注释设置为忽略未使用的变量。为此,请使用以下代码:

    var some_unused_variable; // eslint-disable-line no-unused-vars
    

    我们现在有一个 varsIgnorePattern 此用例可用的选项(最适合忽略所有文件中特定的未使用变量名或模式)。

    文件说明:

    {“varsIgnorePattern”:“[iI]gnored”}选项的正确代码示例:

    /*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/
    
    var firstVarIgnored = 1;
    var secondVar = 2;
    console.log(secondVar);
    
        3
  •  1
  •   sdgfsdh    7 年前

    可以对空对象使用反结构:

    const hasAny = xs => {
      for (const {} of xs) {
        return true;
      }
    
      return false;
    };
    

    更新:当列表包含 undefined