2016-06-24 5 views
-1

オブジェクトリテラルをループして、キーの1つだけを選択して値を返します。これは関数になります。私の問題は、私は1つの値を返すループを得ることができない - 常にすべての値(関数)を返します。私は、オブジェクトリテラル(foo参照)の中に関数を入れ子にすると、よりうまくいくが、まだループしていないことに気づいた。ネストされた関数でオブジェクトリテラルをループする

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

()Object.keysを使用することです。 – melpomene

+0

申し訳ありませんが、私はプログラミングに慣れていませんでした。私はそれが助けるかもしれないと思った。 – Twigs

答えて

2

キーをチェックしていないため、機能に対して文字列をチェックしています。

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

別の方法は、私はコードがあなたの質問に関係しているか見ていない

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

超厳密な比較?編集:私はちょうど冗談を言っていた。 – undefined

+2

=== vs ==を使用して議論があった場所に別の投稿がありました。 ;)引数を保持する考えは新しいスレッドに来ていた。 (3.5時から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(); 
関連する問題