2011-03-08 18 views
11

Estoy tratando de agregar un elemento a una matriz actual.Javascript agregar el elemento a la matriz actual

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

De esta manera, consigo un error y no consigo el valor 1 y el valor 2, después de conseguir la colección hipervínculo cuando intento agregar un nuevo elemento que arroja error: El objeto no acepta esta propiedad o método que es el método push.

¿Qué le está sucediendo a la matriz después de asignar la colección de hipervínculos? ¿Cómo puedo agregar un nuevo elemento?

Respuesta

14

Quizás quiso decir arrayValues.push(document.getElementsByTagName('a'));?

De lo contrario, está asignando el NodeList devuelto por getElementsByTagName(), que sobrescribe la matriz en la que acaba de insertar los valores.

Nota al margen: no hay ninguna razón para usar new Array() aquí. Solo escriba var arrayValues = [];.

+1

Y NodeList no es un conjunto, aunque es "tipo array". – jpsimons

2

Si desea insertar todos los elementos <a> en la matriz, primero debe convertir NodeList en una matriz. La mayoría de las personas usan Array.prototype.slice.call(nodelist).

Una vez que tenga una matriz, puede usar array.push junto con function.apply para enviarlos en una sola llamada.

El código resultante se parece a:

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"); 
+0

No necesita 'aplicar' la llamada a' push'. 'arrayValues' ya es una matriz, y una llamada a' arrayValues.push() 'ejecutará la función correcta (' push') en el ámbito derecho ('arrayValues'). –

+1

En realidad, quiero enviar múltiples argumentos a '.push()'. Por ejemplo, 'var a = [], b = [2,3];', si 'a.push (1); a.push (b); a.push (4)', entonces 'a' es '[1, [2,3], 4]'. Sin embargo, si usa 'a.push.apply (a, b);', obtendrá '[1,2,3,4]'. Ese es el comportamiento esperado de esta respuesta: insertar todos los elementos '' en una matriz existente. También puede decir que es una versión de 'a = a.concat (b);'. – Thai

+0

Bien, eso tiene más sentido. En cuyo caso, ¿por qué no usar 'concat()'? –

Cuestiones relacionadas