самый эффективный способ конвертировать htmlcollection в массив

<p>есть ли более эффективный способ преобразовать htmlcollection в массив, кроме как перебирать содержимое указанной коллекции и вручную помещать каждый элемент в массив?</p>

<p>не уверен, что это наиболее эффективно, но краткий синтаксис es6 может быть таким:</p><pre><code>let arry = [...htmlcollection] </code></pre><hr><p>правка: еще один, из комментария chris\_f:</p><pre><code>let arry = array.from(htmlcollection) </code></pre>

<p>я видел более краткий метод получения методов <code>array.prototype</code> в целом, который работает так же хорошо. преобразование объекта <code>htmlcollection</code> в объект <code>array</code> показано ниже:</p><pre> []. slice.call (yourhtmlcollectionobject); </pre><p>и, как упоминалось в комментариях, <strong>для старых браузеров, таких как ie7 и более ранних версий</strong> вам просто нужно использовать функцию совместимости, например:</p><pre><code>function toarray(x) { for(var i = 0, a = []; i < x.length; i++) a.push(x[i]); return a } </code></pre><p>я знаю, что это старый вопрос, но я чувствовал, что принятый ответ был немного неполным; так что я решил выбросить это туда, fwiw.</p>

<p>это мое личное решение, основанное на информации здесь (эта тема):</p><pre><code>var divs = new array(); var elemns = document.getelementsbyclassname("divisao"); try { divs = elemns.prototype.slice.call(elemns); } catch(e) { divs = $a(elemns); } где $ a был описан гаретом дэвисом в его посте:</p><pre><code>function $a(iterable) { if (!iterable) return []; if ('toarray' in object(iterable)) return iterable.toarray(); var length = iterable.length || 0, results = new array(length); while (length--) results[length] = iterable[length]; return results; } </code></pre><p>если браузер поддерживает лучший способ, хорошо, иначе будет использовать кросс-браузер.</p>

<p>это работает во всех браузерах, включая более ранние версии ie.</p><pre><code>var arr = []; [].push.apply(arr, htmlcollection); </code></pre><p>поскольку jsperf все еще не работает в данный момент, вот jsfiddle, который сравнивает производительность различных методов. <a href="https://jsfiddle.net/qw9qf48j/">https://jsfiddle.net/qw9qf48j/</a> </p>