2016-04-11 8 views
0

FCCにこのチャレンジを行っていますが、私は文字通りその途中です!JavaScriptの真偽判定機能

のコレクション(最初の引数)のすべての要素で述語(第2引数)が真実かどうかを確認してください。導入で

function truthCheck(collection, pre) { 
    // Is everyone being true? 

    for(var i = 0; i < collection.length; i++){ 
    var arr = collection[i]; 
    for(pre in arr){ 
     if (isNaN(arr[pre])){ 
     pre = false; 
     return pre; 
     } else if (arr[pre]){ 
     pre = true; 
     return pre; 
     } 
    } 
    } 
} 

truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex"); 

は、私は半分の方法があったと述べました。真実の値を最初に評価すると、まず真理値が評価されるからです:

if (arr[pre]){ 
    pre = true; 
    return pre; 
} 

すべての「真実」テストが合格するからです。

私は別の方法で '真実性'の評価を受けるべきだと思いますか?私のコードでは、すべての '偽の'値を渡すため、これを言う...

ありがとうございます!

+1

真実はあなたに設定されています – tyler

+2

isNaNを使用しないことから始まります。それはあなたが思っていることをしていません。とにかく「NaN」は馬鹿だ。あなたの配列に偽の値がまったく見つからないという事実は言及しません。 –

+0

おそらく関数の引数として 'pre'が指定されているので、' for(pre in arr) 'を削除するでしょう。 'pre'の与えられた値ではなく、最初のフィールドで真を返します。 – Kenney

答えて

1

これらのうちのどれかが間違っている場合は間違いですので、それをテストしてください。それから誰も嘘でないなら、真実を返してください。

function truthCheck(collection, pre) { 
    for(var i = 0; i < collection.length; i++){ 
     if (!collection[i][pre]) { return false; } 
    } 
    return true; 
} 
+0

非常にエレガントな、ありがとう! –