Question

Je suis itérer sur un tableau à MooTools, mais voir des éléments supplémentaires lorsque vous parcourez à travers le réseau en utilisant la boucle de for..in raccourci. Il fonctionne très bien quand j'utilise la boucle for régulière. Est-ce un problème avec MooTools polluer l'espace de noms global ou que je fais quelque chose de mal ici?

Il y a une fonction createTabs() qui effectue une itération sur un tableau et crée un onglet pour chaque valeur du tableau:

function createTabs() {
    var myTabs = [["First", "a.png"], ["Second", "b.png"]];
    for(var i in myTabs) {
        var tab = new Tab(myTabs[i][0], myTabs[i][1]);
        console.log(i);
    }
}

Ceci est la sortie de console.log(i):

0
1
$family
each
clean
associate
link
contains
extend
getLast
getRandom
include
combine
erase
empty
flatten
hexToRgb
rgbToHex
toJSON

Je comprends les 2 premiers indices, mais où est le reste vient?

Modifier : Merci pour les réponses rapides et Chetan k Prime. Cela a du sens, et l'ajout de Array.each par MooTools est beaucoup plus propre chemin à parcourir!

Attend beaucoup mieux maintenant:

myTabs.each(function(item) {
    var tab = new Tab(item[0], item[1]);
    console.log(item);
});
Était-ce utile?

La solution

for..in n'est pas pour l'itération de tableau. Il itère sur toutes les propriétés d'un objet qui ne sont pas intégré. Depuis MooTools a ajouté plus de fonctions prototype Array, ils sont maintenant des propriétés du tableau ainsi. Voir cette https://developer.mozilla.org/En/Core_JavaScript_1 .5_Reference / Déclarations / Pour ...

Il suffit d'utiliser une base pour la boucle pour l'itération de tableau.

Autres conseils

Chetan a souligné, for .. in est destiné à l'itération de propriété d'objet, pas de tableaux. Cependant, vous pouvez itérer sur les membres actuels (et non les membres hérités fixés par MooTools), en utilisant hasOwnProprty, comme suit:

for (i in array)
    if (array.hasOwnProperty(i))
    {
        //.. do stuff ...
    }

Orr, mieux encore, puisque vous utilisez MooTools, il suffit d'utiliser la méthode Array.each:

array.each (function (item, index)
{
    // ... do stuff ...
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top