-1
votes

Comment définir une valeur booléenne sur une variable à l'intérieur d'une matrice et vérifier cette valeur à l'aide de Node JS?

Je veux définir une valeur booléenne "vraie" à une variable à l'intérieur des drapeaux []. Ensuite, lorsque toutes les variables à l'intérieur des drapeaux [] sont vraies, je dois faire une opération.

Veuillez trouver mon code ci-dessous. P>

var flags = [terminationFlag,transferFlag,jrCancelledFlag,jrFilledFlag,jrOpenFlag,miegFlags,headcountFlag,replacementReqFlag,costcentreFlag,gradeMapFlag]

var arguments = ["terminationReport - 2019-1", "transferReport - 2019-1", "jrCancelledReport - 2019-1", "jrFilledReport - 2019-1", "jrOpenReport - 2019-1","MIEGReport - 2019-1", "HeadCountReport - 2019-1","ReplacementReport - 2019-1","CostcentreReport - 2019-1","GradeMapReport - 2019-1"]

for (i=0; i < arguments.length ;i++){
    console.log("arguments : "+ arguments[i]);
    request('http://localhost:3000/query/CheckKey/'+arguments[i], function (error, response, body) {
        var result = JSON.stringify(response.body).replace(/[^a-zA-Z ]/g, "");
        if (result == "yes"){
            console.log("record found ****************");
            flags[i]=true;
            console.log("flags : "+ flags);
        }
       if flags = true {
           //do operation
        }
    });

} 


2 commentaires

Les drapeaux font-ils partie de la seule partie qui ne fonctionne pas dans votre code?


Oui @holydragon. J'ai besoin de définir la valeur sur les variables à l'intérieur des indicateurs []. afin que je puisse vérifier les valeurs à l'intérieur des indicateurs [] == vrai


3 Réponses :


1
votes

Si vous souhaitez vérifier si chaque élément de drapeaux est vrai, utilisez array.every () : xxx

ou si votre navigateur ne prend pas en charge Es6: xxx


0 commentaires

1
votes

Ceci est probablement parce que vous exécutez une opération asynchrone dans pour boucle. Depuis que vous n'avez pas déclaré i , il est créé comme une variable globale. Le pour La boucle déclenche simplement les demandes et n'attendrons pas que les rappels sont exécutés. Au moment où Demande est effectué, la valeur de i est modifiée en quelque chose d'autre et vous avez fini par attribuer true au mauvais drapeau / code> éléments. Alors, changez-le à: xxx

ou utilisez let : xxx


2 commentaires

Merci pour la réponse.Il fonctionne. Y a-t-il une possibilité que je puisse définir les valeurs telles que TerminantFlag = true, transfert = true, jrcancelledflag = true, jrfilledflag = true. afin que je puisse vérifier comme si (TerminationFlag = true && transfert = true && jrcancelledflag = true && jrfilledflag = true) {// fait une certaine opération}


@Priyanka Vous pouvez continuer à faire référence aux valeurs booléennes. Vous devriez créer un objet avec toutes ces propriétés comme valeurs clés. Ou vous devriez utiliser un Boolean objet



0
votes

Il y a 2 problèmes ici.

Tout d'abord, cette boucle doit utiliser laisser forte> à itérer surtout lorsque vous utilisez la ou les fonctions asynchrones à l'intérieur de la boucle car chaque itération tiendra la valeur i pour chaque boucle. p> xxx pré>

second, p> xxx pré>

Vous devez utiliser n'importe quelle forme de boucle pour vérifier si tous les Les drapeaux dans le tableau des flags sont vrais. Vous pouvez utiliser Array.Every Comme dans la réponse de Jack Bashford. P>

Je recommande une boucle ordinaire car elle est meilleure-performance-sage. p>

let allFlagsTrue = true
for (let j = 0; j < flags.length; j++){
    if (flags[i] === false){
        allFlagsTrue = false
    }
}
if (allFlagsTrue){
    // Do your operations
}


0 commentaires