2010-11-24 11 views
5

He creado un objeto que contiene algunos elementos, incluido uno que contiene varios objetos, cada uno de los cuales contiene una matriz. Así es como está estructurado.. Cada uno no funciona en una matriz. Pero .isArray se vuelve verdad?

$.myVar = { 
    cp : "", 
    ps : { 
     m1 : ["001", "002", "003"], 
     m2 : ["002", "004"] 
    } 
}; 

Mis guiones bloquea continuamente diciendo que $ .myVar.ps [ "m1"] no tiene un método cada uno.

Cuando llegué a la consola de Chrome para investigar, ejecuto lo siguiente y obtengo el resultado que se muestra.

$.myVar.ps["m1"] 
["001", "002", "003"] 
$.myVar.ps["m1"].each(function (i, p) {alert(i)}) 
TypeError: Object 001,002,003 has no method 'each' 

También si ejecuto lo siguiente, demuestra que m1 es una matriz.

$.isArray($.myVar.ps["m1"]) 
true 

por lo que parece estar de acuerdo con m1 es una matriz, pero se niega a tratarlo como tal. ¿Alguna idea de lo que estoy haciendo mal?

Respuesta

19

each no es un Array método nativo; es un método de objetos jQuery, es decir, los creados por la función $. Puede realizar una

$($.myVar.ps.m1).each(function (i, el) { /* ... */ }); 

(no se recomienda, ya que crea un objeto innecesario jQuery cuando se envuelve la matriz en $(...)) o simplemente puede usar $.each:

$.each($.myVar.ps.m1, function (i, el) { /* ... */ }); 

La ruta más recomendable, si está utilizando un navegador moderno (es decir,> = 9), o el uso de es5-shim, es utilizar el estándar Array.prototype.forEach método:

$.myVar.ps.m1.forEach(function (el, i) { /* ... */ }); 

Observe el orden diferente de los argumentos (IMO mejor ya que puede omitir el índice si no lo necesita).

-2

cada uno no es un método de una matriz en javascript. intento:

$($.myVar.ps["m1"]).each 
+2

1 minuto y 17 segundos. ¡Increíble gracias! – McB

+0

No construya objetos jQuery no válidos; use '$ .each()' en su lugar. – ThiefMaster

Cuestiones relacionadas