2016-05-31 7 views
-2

Hier ist eine Idee von dem, was ich bin nach:Erstellen Sie dynamisches Objekt mit einem for-Schleife

{ 'this id0': function() { 
    console.log(0); 
    }, 

    'this id1': function() { 
    console.log(1); 
    }, 

    ... 
    ... 
} 

Ich dachte, ich so etwas wie versuchen würde:

var foo = {}; 
for (var i = 0, len < 10; i < len; i++) 
    foo['this id'[i]] = function() {console.log([i]}; 

Ich bin unklar, auf dem richtigen Syntax zu verwenden.

+1

''Diese ID' [i]' ➡ ''Diese ID' + i' –

Antwort

1

Schlüssel sind Strings, so dass Sie 'this id'-i verketten müssen:

var foo = {}; 
for (var i = 0; i< 10; i++) { 
    foo['this id' + i] = function() { console.log(i); }; 
} 

foo['this id4'](); // logs 10 
+0

Die obige 'console.log (foo ['diese ID4']()) 'logs * undefined * –

+0

Fixed. Es hat tatsächlich sowohl "10" als auch "undefiniert" protokolliert. – Jieter

+0

Firefox loggt immer noch * undefined * während Chrome sowohl * 10 * als auch * undefined * protokolliert –

1

Objektattribute müssen gültige Zeichenfolge sein bei der Verwendung von eckigen Klammern zugreifen:

foo['this id' + String(i)] 

dieser for-Schleife der hinzufügen

+0

Die Verkettung wird automatisch in eine Zeichenkette umgewandelt. Casting war nicht notwendig –

+0

Ja, das stimmt, aber es ist eine gute Übung, explizit zu String zu casten! – aliasav

Verwandte Themen