在javascript中检查indexof()不能用于使用循环初始化动态值示例:new1

时间:2018-04-26 03:25:23

标签: javascript

var statusfield1 = "Yes";
var statusfield2 = "Yes";
for (j = 1; j <= 5; j++) {
  if (("statusfield" + j).indexOf("Yes") >= 0) {

  }
}

它不会进入If条件。

2 个答案:

答案 0 :(得分:1)

你在这里有误解。

("statusfield"+j)

在1到5的范围内,stringstatusfield1statusfield2 ... 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");
  }
}

很简单吧?