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

如何将字符串作为变量名,动态访问对象属性避免switch分支?

动态访问对象属性解决冗余判断问题

看起来你是想用动态属性名来访问this上的weekly/monthly/quarterly数组,避免冗余的switch判断对吧?你的思路完全没问题,但代码里有几个关键错误,我帮你修正并解释清楚:

核心错误点分析

  • name变量赋值错误:你写的var name = newCheckbox.checked拿到的是布尔值(true/false),但你需要的是对应数组名称的字符串("weekly"/"monthly"/"quarterly"),应该取checkbox的name属性。
  • indexOf参数错误:你写的indexOf('newCheckbox.value')是在数组里找字符串"newCheckbox.value",而非实际的newCheckbox.value变量值,这会导致永远找不到目标索引。
  • 动态属性访问方式错误:拼接字符串'this.+'newCheckbox.checked的写法完全不符合JS语法,动态访问对象属性直接用方括号语法this[name]即可。

修正后的完整代码

checkboxSaveOnChange: function(newCheckbox){
  // 拿到对应数组的名称(weekly/monthly/quarterly)
  var name = newCheckbox.name;
  // 缓存checkbox的值,避免重复读取
  var value = newCheckbox.value;

  if (newCheckbox.checked) {
    // 动态访问对应数组,添加值
    this[name].push(value);
  } else {
    // 找到值在数组中的索引
    var index = this[name].indexOf(value);
    // 只有找到有效索引(不等于-1)时才执行删除,避免报错
    if (index !== -1) {
      this[name].splice(index, 1);
    }
  }

  // 测试输出,确认数组变化
  console.log(this.weekly);
  console.log(this.monthly);
  console.log(this.quarterly);
},

额外注意事项

  • 确保this的上下文正确:如果这个方法是事件回调,可能需要提前绑定this(比如用箭头函数或者bind),否则this[name]可能找不到对应的数组。
  • 提前初始化数组:要保证this.weekly、this.monthly、this.quarterly都是已初始化的空数组(比如在类的构造函数里赋值this.weekly = []),否则执行push操作时会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:35:42