You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript循环初始化动态值时indexOf()方法失效问题

为什么你的循环里indexOf没生效?我来帮你搞定!

问题根源你得先明白

你现在写的("statusfield" + j).indexOf("Yes"),其实是在对变量名的字符串(比如"statusfield1")做查找,而不是去读statusfield1这个变量里的"Yes"值!字符串"statusfield1"里根本没有"Yes",所以这个判断永远返回-1,自然进不了if块啦。

两种靠谱的解决方案

方案1:用对象存状态(推荐,代码更规范)

把所有status相关的变量塞进一个对象里,这样就能通过动态生成的属性名来取值,逻辑清晰还好维护:

// 先把状态字段整理到对象里
const statusFields = {
  field1: "Yes",
  field2: "Yes",
  field3: "No", // 举个其他值的例子
  field4: "Yes",
  field5: "No"
};

for (let j = 1; j <= 5; j++) {
  // 动态获取对应字段的值
  const currentStatus = statusFields[`field${j}`];
  // 这里可以用includes更直观,不用indexOf判断>=0
  if (currentStatus && currentStatus.includes("Yes")) {
    console.log(`statusfield${j}的值是Yes,进入判断啦!`);
    // 这里写你的业务逻辑
  }
}

方案2:访问全局变量(仅限变量是全局的情况)

如果你的statusfield1、statusfield2这些是全局变量(比如直接在script标签里定义的,挂载在window上),可以通过window[变量名字符串]来拿到变量的值:

var statusfield1 = "Yes";
var statusfield2 = "Yes";
var statusfield3 = "No";
var statusfield4 = "Yes";
var statusfield5 = "No";

for (let j = 1; j <= 5; j++) {
  // 动态获取全局变量的值
  const currentStatus = window[`statusfield${j}`];
  if (currentStatus && currentStatus.indexOf("Yes") >= 0) {
    console.log(`statusfield${j}的值是Yes,进入判断啦!`);
  }
}

小提示优化代码

  • 尽量用let/const替代var,避免变量提升带来的奇怪问题;
  • 如果只是判断值是否是"Yes",直接用currentStatus === "Yes"会更高效;如果是判断包含"Yes",用ES6的includes()比indexOf()可读性更强哦。

内容的提问来源于stack exchange,提问作者sam mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:34:33