2016-06-24 14 views
-1

Ich versuche, ein Objektliteral durchzulaufen und nur einen der Schlüssel auszuwählen und seinen Wert zurückzugeben, was eine Funktion sein wird. Mein Problem ist, dass ich die Schleife nicht dazu bringen kann, nur einen Wert zurückzugeben - es gibt immer alle Werte (Funktionen) zurück. Ich habe bemerkt, dass wenn ich die Funktion innerhalb des Objektliterals verschachtele (siehe foo), es besser funktioniert, aber immer noch nicht durchläuft.Objektliteral mit verschachtelten Funktionen durchlaufen

Here is the JS fiddle.

var functions = { 
    blah: blah(), 
    foo: function() { console.log("foo"); } 
}; 


for(var key in functions){ 
    if(functions[key] == 'foo') { 
    console.log("hello"); //if functions contains the key 'foo' say hi 
    } 
} 
function blah() {alert("blah")}; 

functions.foo(); 
+0

Ich sehe nicht, was der Code mit Ihrer Frage zu tun hat. – melpomene

+0

Sorry, ich war neu im Programmieren. Ich dachte, es könnte helfen. – Twigs

Antwort

2

Sie suchen nicht nach dem Schlüssel, Sie überprüfen eine Zeichenkette gegen eine Funktion.

for(var key in functions){ 
    if (key==="foo") { 
     console.log("hello"); 
    } 
} 

eine andere Art und Weise ist Object.keys zu verwenden()

var keys = Object.keys(functions); 
if (keys.indexOf("foo")>-1) { 
    console.log("hello"); 
} 
+1

Super-strikter Vergleich? edit: Ich habe nur Spaß gemacht. – undefined

+2

Es gab einen weiteren Post, in dem es einen Streit über die Verwendung von === vs == gab und ich merkte nicht, dass ich es fett betastete. ;) Dachte, dass Hold-Argument zu einem neuen Thread kam. (3,5 Stunden mehr bis 5) – epascarello

1
in your condition if(functions[key] == 'foo') 

the functions[key] returns a function. the key itself is already a literal that can be compare to 'foo' 

var functions = { 
    blah: blah(), 
    foo: function() { console.log("foo"); } 
}; 


for(var key in functions){ 
    if(key == 'foo') { 
    console.log("hello"); //if functions contains the key 'foo' say hi 
    } 
} 
function blah() {alert("blah")}; 

functions.foo();