Pregunta

Estoy interactuando sobre una matriz en MooTools pero al ver los elementos adicionales cuando se repite a través de la matriz mediante el bucle for..in taquigrafía. Funciona bien cuando se utiliza el bucle for regular. Es este un problema con MooTools contaminar el espacio de nombres global o estoy haciendo algo mal aquí?

Hay una función createTabs() que itera sobre una matriz y crea una ficha para cada valor de la matriz:

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);
    }
}

Esta es la salida de console.log(i):

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

Yo entiendo los 2 primeros índices, pero ¿dónde está el resto proviene de?

Editar : Gracias por las respuestas rápidas y Chetan k Prime. Eso tiene sentido, y la adición Array.each por MooTools es forma mucho más clara para repetir!

Se ve mucho mejor ahora:

myTabs.each(function(item) {
    var tab = new Tab(item[0], item[1]);
    console.log(item);
});
¿Fue útil?

Solución

for..in no es para la matriz de iteración. Itera sobre todas las propiedades de un objeto que no están incorporados. Desde MooTools ha añadido más funciones al prototipo Array, que ahora son propiedades de la matriz también. Ver este https://developer.mozilla.org/En/Core_JavaScript_1 .5_Reference / declaraciones / Por ... en

Sólo tiene que utilizar una base para el bucle de matriz de iteración.

Otros consejos

Como Chetan señaló, for .. in está destinado para la iteración propiedad de objeto, no matrices. Sin embargo, se puede iterar sobre los miembros actuales (y no los miembros heredados establecidos por MooTools), mediante el uso de hasOwnProprty, así:

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

Orr, mejor aún, ya que estás usando MooTools, sólo tiene que utilizar el método Array.each:

array.each (function (item, index)
{
    // ... do stuff ...
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top