Frage

Ich bin der Iteration über ein array in MooTools, sehen aber zusätzliche Elemente bei der Iteration durch das array mit dem Kürzel for..in Schleife.Es funktioniert gut, wenn ich den regulären for Schleife.Ist das ein problem mit MooTools Verschmutzung der globalen namespace oder mache ich etwas falsch hier?

Es ist ein createTabs() Funktion iteriert über ein array und erstellt eine Registerkarte für jeden Wert im array:

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

Dies ist die Ausgabe von console.log(i):

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

Ich verstehe die ersten 2 Indizes, aber wo ist der rest kommt von?

Bearbeiten:Danke für die schnellen Antworten Chetan und k Prime.Das macht Sinn, und die Array.each neben der von MooTools ist viel sauberer Weg zum Durchlaufen!

Sieht jetzt viel besser:

myTabs.each(function(item) {
    var tab = new Tab(item[0], item[1]);
    console.log(item);
});
War es hilfreich?

Lösung

for..in ist nicht für Array Iteration gemeint. Es iteriert alle Eigenschaften eines Objekts, das nicht eingebaut sind. Da MooTools hat mehr Funktionen Array Prototyp hinzugefügt, sind sie nun auch Array-Eigenschaften. Sehen Sie diese https://developer.mozilla.org/En/Core_JavaScript_1 .5_Reference / Statements / For ... in

verwenden, nur eine grundlegende for-Schleife für Array-Iteration.

Andere Tipps

Wie Chetan darauf hingewiesen, for .. in gemeint ist, für die Objekt-Eigenschaft iteration, arrays nicht.Sie können jedoch Durchlaufen die derzeitigen Mitglieder (und nicht die geerbten Mitglieder von MooTools), mithilfe hasOwnProprty, wie so:

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

Orr, besser noch, da Sie mit MooTools, verwenden Sie einfach die Array.each Methode:

array.each (function (item, index)
{
    // ... do stuff ...
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top