2016-04-11 3 views
0

Je passe ce défi sur FCC et je suis littéralement à mi-chemin!Fonction vérificateur de vérité en JavaScript

Vérifiez si le prédicat (second argument) est véridique sur tous les éléments de une collection (premier argument).

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

Dans l'introduction je dit que j'étais à mi-chemin. C'est parce que quand j'évalue les valeurs de vérité d'abord:

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

tous les tests 'truthy' passent.

Donc je suppose que je devrais être évalué pour 'vérité' d'une manière différente? Je dis cela parce que mon code tel qu'il est fait passer toutes les valeurs 'falsey' ...

Merci à tous!

+1

La vérité vous libérera – tyler

+2

Commencez par ne pas utiliser 'isNaN' il ne fait pas ce que vous pensez qu'il est. 'NaN' est une fausseté de toute façon. Sans parler du fait que je ne vois pas du tout de valeurs Falsey dans votre tableau ... –

+0

Peut-être supprimer 'for (pre in arr)' puisque 'pre' est déjà spécifié comme argument de la fonction. Il retournera vrai pour le premier champ, pas pour la valeur donnée de 'pre'. – Kenney

Répondre

1

Il est faux si Falsey pour l'un d'eux, alors testez-le. Alors si aucun d'eux n'est falsey, retournez vrai.

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

Très élégant, merci beaucoup! –