Javascript 如何将布尔值设置为数组中的变量,并使用node js检查该值?

Javascript 如何将布尔值设置为数组中的变量,并使用node js检查该值?,javascript,arrays,node.js,object,for-loop,Javascript,Arrays,Node.js,Object,For Loop,我想为标志[]内的变量设置布尔值true。然后,当标志[]中的所有变量都为true时,我需要执行一个操作 请在下面找到我的代码 var flags = [terminationFlag,transferFlag,jrCancelledFlag,jrFilledFlag,jrOpenFlag,miegFlags,headcountFlag,replacementReqFlag,costcentreFlag,gradeMapFlag] var arguments = ["terminationRe

我想为标志[]内的变量设置布尔值true。然后,当标志[]中的所有变量都为true时,我需要执行一个操作

请在下面找到我的代码

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

} 

但它不起作用。请帮助我解决此问题。

如果要检查标志中的每个元素是否为真,请使用:

或者,如果您的浏览器不支持ES6:

if (flags.every(function(flag) {
    return flag;
})) {...}

这可能是因为您正在for循环中运行异步操作。因为您没有声明i,所以它被创建为一个全局变量。for循环只触发请求,不会等待回调运行。当请求完成时,i的值被更改为其他值,您最终将true分配给错误的标志项。因此,将其更改为:

arguments.forEach((arg, i) => {
  console.log("arguments : " + arg);
  request('http://localhost:3000/query/CheckKey/' + arg, 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
    }
  });
})
或使用let:


这里有两个问题

首先,这个for循环应该使用let进行迭代,特别是当您在循环中使用异步函数时,因为每次迭代都会保存每个循环的i值

for (let i=0; i < arguments.length ;i++){
您必须使用任何形式的循环来检查flags数组中的所有标志是否为true。你可以在杰克·巴什福德的回答中使用

我建议使用普通for循环,因为它的性能更好

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

标志部分是代码中唯一不起作用的部分吗?是@holydragon。我需要将值设置为标志[]内的变量。这样我就可以检查标志[]==True中的值了谢谢你的响应。它可以工作。是否有可能设置terminationFlag=true、transferFlag=true、jrCancelledFlag=true、jrFilledFlag=true等值。这样我就可以检查terminationFlag=true&&transferFlag=true&&jrCancelledFlag=true&&jrFilledFlag=true{//do some operation}@Priyanka是否可以保留对布尔值的引用。您必须创建一个将所有这些属性作为键值的对象。或者你必须使用一个对象
for (let i=0; i < arguments.length ;i++){
if flags = true {
    //do operation
}
let allFlagsTrue = true
for (let j = 0; j < flags.length; j++){
    if (flags[i] === false){
        allFlagsTrue = false
    }
}
if (allFlagsTrue){
    // Do your operations
}