如何将烦人的“for”循环转换为“Object.keys”例程或类似例程(JSLint)

How to translate vexing 'for' loop into 'Object.keys' routine or similar (JSLint)

本文关键字:例程 keys JSLint Object 转换 循环 for      更新时间:2023-09-26

我试图遵循JSLint的"最佳实践",它不鼓励for循环,建议使用Object.keys和类似的循环。大多数for循环都很容易转换为带有forEachObject.keys,如下所示:

Object.keys(object).forEach(function (key) {

等。

还有一个真实的例子,如下所示:

var elems = document.getElementsByClassName('myClass');
Object.keys(elems).forEach(function (key) {
    elems[key].style.display = 'block';
    elems[key].style.visibility = 'visible';
});

但是,我对如何将以下例程转换为不使用标准for循环的形式感到困惑。

var selection = window.getSelection();
var htmlDiv = document.createElement("div");
var i;
for (i = 0; i < selection.rangeCount; ++i) {
    htmlDiv.appendChild(selection.getRangeAt(i).cloneContents());
}

我不需要迭代window.getSelection();我需要使用 window.getSelection() 的本机getRangeAt()函数按范围抓取文本。

任何线索如何在不使用上述标准for循环的情况下执行此操作?

好吧,我会成为猴子的叔叔。被JSLint规定的"Object.keys"代替"for"(参见:jslint.com/help.html#for)所误导,@guest271314建议使用一个简单的"while"循环,并通过了JSLint的标准:

while (i < selection.rangeCount) {
    htmlDiv.appendChild(selection.getRangeAt(i).cloneContents());
    i += 1;
}

JSLint 还坚持使用 'i += 1;' 而不是 i++; 并提供了一个基本原理(见 http://www.jslint.com/help.html#inc)。但他们没有解释为什么while循环与"for"循环相比是可以的;有人愿意猜测吗?