【问题标题】:Creating an n-sized Array while making JSLint happy?在让 JSLint 开心的同时创建一个 n 大小的数组?
【发布时间】:2012-03-09 03:47:15
【问题描述】:

JSlint 不喜欢使用 Array 构造函数,并且没有 JSLint 选项允许它们使用。因此,要创建一个长度为 n 的 Array,以下是不允许的:

var arr = new Array(n);

下面是我可以解决这个问题的唯一方法吗?

var arr = [];
arr.length = 5;

在正常情况下这没什么大不了的(使用两行代码而不是一行),但我很遗憾不能使用简洁的字符串乘法器技巧:

function repeat(str, times) {
    return new Array(times + 1).join(str);
}

【问题讨论】:

  • 为什么需要创建一个 n 大小的数组?鉴于您已将字符串乘法器函数描述为使用“hack”,我很惊讶您关心 jslint 对 new Array() 的评价...但您可以使用 for 循环或 .length = 轻松实现 repeat() 函数如果这是你需要new Array()的唯一原因。
  • “我很遗憾无法使用...”您是否受到需要使用 JSLint 的限制?
  • @Michael 不,这不是重复的。
  • @nnnnnn 这是关于当一个聪明的单行代码可用时必须使用 3 行代码......你读过我的问题中的用例吗?

标签: javascript arrays jslint


【解决方案1】:

JSLint 相当容易被智取。

你可以这样做:

function repeat(str, times) {
    var A = Array;
    return new A(times + 1).join(str);
}

这也可以:

function repeat(str, times) {
    return new Array.prototype.constructor(times + 1).join(str);
}

【讨论】:

  • 完美!这就是我要找的:)
  • 没问题。需要注意的有趣的事情是,要绕过 linter,您实际上已经生成了更多笨拙的代码,因此 linter 的作用与它的预期相反。如果您经常遇到这种情况,您可能会考虑查看(或让项目负责人查看)其他 linter。
  • 我真的不介意这种尴尬。我真的很想看看是否存在使 JSLint 忽略该 hack 的 hack。
  • 这很容易解决,但是等到您尝试在循环条件下进行分配...我发现 JSLint 是不必要的限制。你永远无法做到这一点:var node = document.body.firstChild; do { console.log(node); } while (node = node.nextSibling);
猜你喜欢
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多