Как преобразовать коллекцию в массив в JavaScript - PullRequest
22 голосов
/ 01 марта 2011

Я пытаюсь выяснить, как преобразовать коллекцию javascript (то есть что-то, возвращенное из getElementsByTagName / etc) в обычный массив, чтобы я мог выполнять функции массива над данными.

Я ищу решение без с использованием каких-либо библиотек и не смог найти ни одного элегантного решения где-либо в Интернете. Кто-нибудь написал хорошую утилиту для этой проблемы?

Ответы [ 4 ]

32 голосов
/ 01 марта 2011

Вы можете сделать это:

var coll = document.getElementsByTagName('div');

var arr = Array.prototype.slice.call( coll, 0 );

РЕДАКТИРОВАТЬ: Как отмечено @ Крис Нильсен , это не удается в IE pre-9.Лучше всего провести некоторое тестирование функции и создать функцию, которая может обрабатывать либо просто, либо просто выполнить цикл, как в (втором) решении из @brilliand.

12 голосов
/ 17 мая 2017

В современном браузере вы можете использовать Array.from, который " создает новый экземпляр массива из массива или итеративного объекта "

Пример: Преобразование HTML-коллекции в массив

const divs = document.getElementsByTagName('div');
const myArray = Array.from(divs); // [div, div, ...]
8 голосов
/ 01 марта 2011

Скопировать его в обычный массив?

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]);
1 голос
/ 28 мая 2019

Вы можете использовать спред оператора:

var coll = document.getElementsByTagName('div');

var arr = [...coll];

Синтаксис распространения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...