如何在javascript中将集合转换为数组

waj*_*jiw 23 javascript arrays collections

我试图找出如何将javascript集合(即从getElementsByTagName/etc返回的东西)转换为普通数组,以便我可以对数据执行数组函数.

我正在寻找一种使用任何库的解决方案,并且无法在网上找到任何优雅的解决方案.有谁为这个问题写了一个好的util函数?

use*_*716 34

你可以这样做:

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

var arr = Array.prototype.slice.call( coll, 0 );
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Chris Nielsen所说,这在IE 9之前的失败.最好的做一些功能测试,并创建一个可以处理任何功能的功能,或者只是像@brilliand 的(第二个)解决方案那样进行循环.

  • 或者保存一些输入:`[] .slice.call(document.getElementsByTagName('div'),0);` (5认同)
  • 这在IE6,IE7和IE8中失败.适用于IE9. (2认同)

sqr*_*ren 14

在现代浏览器中,您可以使用Array.from" 从类似数组或可迭代对象创建新数组实例 "

示例:将HTML集合转换为数组

const divs = document.getElementsByTagName('div');
const myArray = Array.from(divs); // [div, div, ...]
Run Code Online (Sandbox Code Playgroud)


Bri*_*and 8

将它复制到常规数组?

var coll = document.getElementsByTagName('div');
var arr = [];
for(var i in coll) arr[i] = coll[i];
Run Code Online (Sandbox Code Playgroud)

我使用JavaScript已经有一段时间...你可能需要这个:

var coll = document.getElementsByTagName('div');
var arr = [];
for(var i = 0; i < coll.length; i++) arr.push(coll[i]);
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用扩展运算符:

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

var arr = [...coll];
Run Code Online (Sandbox Code Playgroud)

传播语法

  • 这个答案被低估了! (2认同)