【发布时间】:2010-09-18 09:08:17
【问题描述】:
除了遍历所述集合的内容并手动将每个项目推入数组之外,是否有更有效的方法将 HTMLCollection 转换为数组?
【问题讨论】:
-
什么是“高效”?如果性能最好,for 循环通常比 Array.prototype.slice 更快。循环也适用于更广泛的浏览器(即所有浏览器),因此根据这些标准,它是“最有效的方式”。而且它的代码很少:
for (var a=[], i=collection.length; i;) a[--i] = collection[i];所以那里没有太多的“骗局”:-) -
@RobG 谢谢 - 如果可以的话,我会给你 +59k! ;-)
-
看看current browser performance,slice 在性能方面几乎赶上了循环,除了 Chrome。使用更多的元素和对循环的轻微优化,results are almost identical,除了在 Chrome 中循环要快得多。
-
我创建了一个 jsperf 测试,它查看@harpo 提到的两种方法以及一个 jquery 性能测试。我发现 jquery 比 javascript 方法稍慢,并且 js 测试用例之间的顶级性能有所不同。 Chrome 59.0.3071 / Mac OS X 10.12.5 更喜欢使用
Array.prototype.slice.call,而 Brave(基于 Chrome 59.0.3071)在多次运行的两个 javascript 测试之间几乎没有区别。见jsperf.com/htmlcollection-array-vs-jquery-children -
jsben.ch/h2IFA => 最常用方法的性能测试
标签: javascript arrays object