Javascript tableau itération à l'aide for..in avec MooTools inclus
-
19-09-2019 - |
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);
});
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 ...
});