【问题标题】:How to toggle many values at once / values are in a list?如何一次切换多个值/值在列表中?
【发布时间】:2019-06-05 09:08:49
【问题描述】:

有没有一种有效的方法来一次切换多个变量的布尔值?我的变量是我想根据 userValue 显示/隐藏的行。

myList = [lineA, lineB, lineC, lineD]

我下面的例子是非常硬编码的。有很多重复的代码。有没有更聪明的方法来做到这一点?

if (userValue == 'A') {
    lineA.visible = true;
    lineB.visible = false;
    lineC.visible = false;
    lineD.visible = false;
} else if (userValue == 'B') {
    lineA.visible = false;
    lineB.visible = true;
    lineC.visible = false;
    lineD.visible = false;
} else if (userValue == 'C') {
    lineA.visible = false;
    lineB.visible = false;
    lineC.visible = true;
    lineD.visible = false;
} else if (userValue == 'D') {
    lineA.visible = false;
    lineB.visible = false;
    lineC.visible = false;
    lineD.visible = true;
}

【问题讨论】:

    标签: javascript logic


    【解决方案1】:

    开关盒会更好:

    //initialize to false
    lineA.visible = false;
    lineB.visible = false;
    lineC.visible = false;
    lineD.visible = false;
    
    switch(userValue ) {
      case 'A':
        lineA.visible = true;
        break;
       case 'B':
        lineB.visible = true;
        break;
     case 'C':
        lineC.visible = true;
        break;
     case 'D':
        lineD.visible = true;
        break;
      default:
        // do something
    }
    

    【讨论】:

      【解决方案2】:
      const lines = [lineA, lineB, lineC, lineD];
      const userInputs = ['A', 'B', 'C', 'D']
      
      // Reset visible states for all lines
      for (line of lines) {
          line.visible = false;
      }
      
      // Set visible = true for specific line, picked by entered userValue
      lines[userInputs.indexOf(userValue)].visible = true
      

      【讨论】:

        【解决方案3】:

        您可以创建两个数组,一个是字母数组,第二个是线条数组。循环遍历行数组并将所有更改为false。然后从字母数组中获取userValue的索引,并通过将visible更改为true来更改该索引处的行

        const arr = ['A','B','C','D']
        const objs = [lineA,lineB,lineC,lineD];
        objs.forEach(x => x.visible = false)
        
        let index = arr.indexOf(userValue);
        obj[index].visible = true;
        

        【讨论】:

          【解决方案4】:

          你可以为值取一个对象,为行取一个数组。然后迭代并使用检查结果设置visible

          var userValue = 'A',
              values = { A: lineA, B: lineB, C: lineC, D: lineD },
              userObject = values[userValue],
              lines = [lineA, lineB, lineC, lineD];
          
          lines.forEach(line => line.visible = line === userObject);
          

          【讨论】:

          • 所有项目都需要默认设置false
          • @luther,我想念什么吗?它正在为所有没有实际值的项目设置false
          • 我们不知道项目的当前状态。
          • 条件总是返回truefalse。旧状态被此值覆盖。
          猜你喜欢
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-14
          • 2022-01-12
          • 2014-02-15
          相关资源
          最近更新 更多