2010-11-24 10 views
5

J'ai créé un objet qui contient quelques éléments, dont un contenant plusieurs objets contenant chacun un tableau. Voici comment il est structuré.. Ne fonctionne pas sur un tableau. Mais .isArray retourne vrai?

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

Mes scripts continuent à s'écraser disant que $ .myVar.ps [ "m1"] n'a pas de méthode chacun.

Lorsque je suis entré dans la console de Chrome pour examiner, je cours ce qui suit et obtient la sortie affichée.

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

De plus, si je lance ce qui suit, cela prouve que m1 est un tableau. Donc, il semble être d'accord avec m1 est un tableau, mais il refuse de le traiter en tant que tel. Une idée de ce que je fais mal?

Répondre

19

each est pas une méthode Array native; c'est une méthode d'objets jQuery, c'est-à-dire ceux créés par la fonction . Vous pouvez faire

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

(pas recommandé, car il crée un objet jQuery inutile quand il enveloppe le tableau dans $(...)) ou vous pouvez simplement utiliser $.each:

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

L'itinéraire le plus recommandé, si vous utilisez un navigateur moderne (IE> = 9), ou à l'aide es5-shim, est d'utiliser la méthode Array.prototype.forEach standard:

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

Notez l'ordre différent des arguments (IMO mieux puisque vous pouvez alors omettre l'index si vous n'en avez pas besoin).

-2

chaque n'est pas une méthode d'un tableau en javascript. essayer:

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

1 minute et 17 secondes. Super merci! – McB

+0

Ne construit pas d'objets jQuery invalides; utilisez '$ .each()' à la place. – ThiefMaster