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

Posted

技术标签:

【中文标题】如何在javascript中将集合转换为数组【英文标题】:How to convert a collection to an array in javascript 【发布时间】:2011-07-06 17:05:32 【问题描述】:

我正在尝试弄清楚如何将 javascript 集合(即从 getElementsByTagName/etc 返回的内容)转换为普通数组,以便我可以对数据执行数组函数。

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

【问题讨论】:

【参考方案1】:

你可以这样做:

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

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

编辑: 正如@Chris Nielsen 所指出的,这在 IE 9 之前的版本中失败了。最好是做一些功能测试,然后创建一个可以处理其中任何一个的函数,或者像 the (second) solution 中的 @brilliand 那样做一个循环。

【讨论】:

或者节省一些输入:[].slice.call(document.getElementsByTagName('div'), 0); @lwburk:是的,但我个人不会仅仅为了获得.slice() 而构建一个新数组,特别是如果我要多次使用它。尽管我认为您的较短版本是创建可重用参考的一种方式。 var slice = [].slice; /*...*/ slice.call( coll, 0 ); 这在 IE6、IE7 和 IE8 中失败。在 IE9 中工作。【参考方案2】:

这在现代浏览器中变得简单多了。我将概述两种方法。

扩展运算符

“扩展语法允许扩展可迭代 (...)”

const divs = document.getElementsByTagName('div');
const myArray = [...divs]; // [div, div, ...]

Array.from

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]);

【讨论】:

+1 用于正确处理 IE。第二种解决方案更适合 javascript。【参考方案4】:

您可以使用扩展运算符:

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

var arr = [...coll];

Spread syntax

【讨论】:

这个答案被低估了!

以上是关于如何在javascript中将集合转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Javascript 中将表单数组转换为 JSON? (对象数组)?

如何在javascript中将嵌套对象转换为对象数组? [关闭]

在javascript中将数字转换为数组| angular7的打字稿[重复]

如何在javascript中将嵌套集转换为嵌套数组?

在javascript中将html表转换为数组

在Javascript / React中将对象转换为数组