问题 Javascript将项目添加到当前数组


我正在尝试将项添加到当前数组。

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

通过这种方式我得到一个错误,并且我得到超值集合后,当我尝试添加它抛出的新项目时,我得不到值1和值2错误:对象不支持此属性或方法,这是推送方法。

收集超链接后,数组发生了什么?如何添加新项目?


8543
2018-03-08 03:49


起源



答案:


你的意思是 arrayValues.push(document.getElementsByTagName('a'));

否则,你正在分配 NodeList 归来的 getElementsByTagName(),它会覆盖你刚刚将值推入的数组。

旁注:没有理由使用 new Array() 这里。写吧 var arrayValues = [];


14
2018-03-08 03:52



并且NodeList不是一个数组,尽管它是“类似数组的”。 - jpsimons


答案:


你的意思是 arrayValues.push(document.getElementsByTagName('a'));

否则,你正在分配 NodeList 归来的 getElementsByTagName(),它会覆盖你刚刚将值推入的数组。

旁注:没有理由使用 new Array() 这里。写吧 var arrayValues = [];


14
2018-03-08 03:52



并且NodeList不是一个数组,尽管它是“类似数组的”。 - jpsimons


如果你想推动所有 <a> 对于数组的元素,您必须首先将NodeList转换为数组。大多数人使用 Array.prototype.slice.call(nodelist)

一旦你有了一个数组,你就可以使用了 array.push 和这个结合 function.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");

2
2018-03-08 03:58



你不需要 apply 打电话给 push。 arrayValues 已经是一个数组,并调用 arrayValues.push() 将执行正确的功能(push)在适当的范围内(arrayValues)。 - Matt Ball
我实际上想发送多个参数 .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