Javascript 如何将布尔值设置为数组中的变量,并使用node js检查该值?
我想为标志[]内的变量设置布尔值true。然后,当标志[]中的所有变量都为true时,我需要执行一个操作 请在下面找到我的代码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
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
}