Domanda

Io sono l'iterazione di un array in MooTools ma vedendo elementi aggiuntivi quando l'iterazione attraverso l'array utilizzando il ciclo for..in stenografia. Funziona bene quando uso il ciclo for regolare. È questo un problema con MooTools inquinare il namespace globale o sto facendo qualcosa di sbagliato qui?

C'è una funzione createTabs() che scorre su un array e crea una scheda per ogni valore nella matrice:

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

Questa è l'uscita di console.log(i):

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

Capisco le prime 2 indici, ma dov'è il resto viene?

Modifica : Grazie per le risposte veloci e Chetan k Prime. Questo ha un senso, e l'aggiunta Array.each da MooTools è modo molto più pulito per iterare!

sembra molto meglio ora:

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

Soluzione

for..in non è destinata a matrice iterazione. Si itera su tutte le proprietà di un oggetto che non sono built-in. Poiché MooTools ha aggiunto più funzioni prototipo Array, ora sono proprietà degli array pure. Vedere questo https://developer.mozilla.org/En/Core_JavaScript_1 .5_Reference / dichiarazioni / Per ... in

Basta usare una base ciclo per matrice di iterazione.

Altri suggerimenti

Come Chetan sottolineato, for .. in è destinata proprietà dell'oggetto iterazione, non array. tuttavia, è possibile scorrere i membri attuali (e non i membri ereditati fissati dal MooTools), utilizzando hasOwnProprty, in questo modo:

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

Orr, meglio ancora, dal momento che si sta utilizzando MooTools, basta usare il metodo Array.each:

array.each (function (item, index)
{
    // ... do stuff ...
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top