Как преобразовать коллекцию в массив в javascript
Я пытаюсь понять, как преобразовать коллекцию javascript (то есть что-то возвращенное из getElementsByTagName/etc) в обычный массив, чтобы я мог выполнять функции массива данных.
Я ищу решение без, используя любые библиотеки, и не смог найти какие-либо элегантные решения в любом месте в Интернете. Кто-нибудь написал хорошую функцию использования для этой проблемы?
Ответы
Ответ 1
Вы можете сделать это:
var coll = document.getElementsByTagName('div');
var arr = Array.prototype.slice.call( coll, 0 );
EDIT: Как отметил @Chris Nielsen, это не удается в IE до 9. Лучше всего было бы провести некоторое тестирование функций и создать функцию, которая может обрабатывать либо, либо просто сделать цикл, как в (втором) решении, из @brilliand.
Ответ 2
В современном браузере вы можете использовать Array.from
который "создает новый экземпляр Array из массива или повторяемого объекта"
Пример: преобразование HTML-коллекции в массив
const divs = document.getElementsByTagName('div');
const myArray = Array.from(divs); // [div, div, ...]
Ответ 3
Скопировать его в обычный массив?
var coll = document.getElementsByTagName('div');
var arr = [];
for(var i in coll) arr[i] = coll[i];
Прошло некоторое время с тех пор, как я использовал JavaScript... вам может понадобиться это:
var coll = document.getElementsByTagName('div');
var arr = [];
for(var i = 0; i < coll.length; i++) arr.push(coll[i]);
Ответ 4
Вы можете использовать спред оператора:
var coll = document.getElementsByTagName('div');
var arr = [...coll];
Синтаксис распространения