JavaScript 如何向当前数组添加元素

11

我正在尝试向当前数组中添加一个项目。

var arrayValues = new Array();
arrayValues.push("Value 1");
arrayValues.push("Value 2");
arrayValues = document.getElementsByTagName('a');
arrayValues.push("Value 3");

用这种方式,我得到一个错误,并且我没有获得值1和值2,在获取超链接集合后,尝试添加新项目时会抛出错误:对象不支持此属性或方法,即push方法。

在分配超链接集合后,数组发生了什么?我该如何向其中添加一个新项?

2个回答

14

您是否意思是 arrayValues.push(document.getElementsByTagName('a'));

否则,您正在分配由getElementsByTagName()返回的NodeList,这将覆盖您刚刚推入值的数组。

另外,这里没有理由使用new Array()。只需编写var arrayValues = [];即可。


1
NodeList并不是Array,但它的确是“类数组”。 - jpsimons

2
如果你想将所有的<a>元素推入数组中,你需要先将NodeList转换为数组。大多数人使用Array.prototype.slice.call(nodelist)
一旦你有了一个数组,你可以使用array.pushfunction.apply结合使用,以一次调用的方式将它们推送到数组中。
生成的代码如下:
var arrayValues = [];
arrayValues.push("Value 1");
arrayValues.push("Value 2");
arrayValues.push.apply(arrayValues, Array.prototype.slice.call(document.getElementsByTagName('a')));
arrayValues.push("Value 3");

你不需要“应用”push调用。arrayValues已经是一个数组,而对arrayValues.push()的调用将在正确的作用域(arrayValues)中执行正确的函数(push)。 - Matt Ball
1
我实际上想要向.push()发送多个参数。例如,var a = [],b = [2,3];,如果你a.push(1);a.push(b);a.push(4),那么a就是[1,[2,3],4]。但是,如果您使用a.push.apply(a,b);,则会得到[1,2,3,4]。这是此答案的预期行为:将所有<a>元素推送到现有数组中。您还可以说它是a = a.concat(b);的一个版本。 - Thai
好的,那样更有意义。既然这样,为什么不直接使用 concat() 呢? - Matt Ball

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接