var statusfield1 = "Yes";
var statusfield2 = "Yes";
for (j = 1; j <= 5; j++) {
if (("statusfield" + j).indexOf("Yes") >= 0) {
}
}
它不会进入If条件。
答案 0 :(得分:1)
你在这里有误解。
("statusfield"+j)
在1到5的范围内,string
将statusfield1
,statusfield2
... statusfield5
结果字符串statusfield_
中没有一个包含Yes
,因此'statusfield1'.indexOf('Yes')
将始终返回-1
。因此,if
条件永远不会匹配。
您必须在范围内检查以获取具有动态名称的变量值。
var statusfield1 = "Yes";
var statusfield2 = "Yes, it is";
var statusfield4 = "Yessss";
var scope = this;
var field;
for (j = 1; j <= 5; j++) {
field = "statusfield" + j;
if (undefined !== scope[field]) {
if (-1 < scope[field].indexOf('Yes')) {
console.log('got match', field);
} else {
console.log('no match !');
}
} else {
console.log('no such variable exists, ', field);
}
}
答案 1 :(得分:0)
正如@Arvind所说,让你的理解正确,正确地了解你的语言。
我假设你想在列表变量中动态检查字符串“yes”。如果是这种情况,请使用json对象(类似于java中的map),如下所示 -
var map = {
"statusfield1" : "Yes",
"statusfield2" : "Yes",
"statusfield3" : "Yes",
"statusfield4" : "Yes",
"statusfield5" : "Yes"
}
在迭代中你可以这样做 -
var keys = Object.keys(map);
for (let j = 1; j <= keys.length; j++) {
if (map["statusfield"+j].indexOf("Yes") >= 0) {
console.log("Yes found");
}
}
很简单吧?