Javascript 如何一次切换多个值/列表中的值?

Javascript 如何一次切换多个值/列表中的值?,javascript,logic,Javascript,Logic,有没有一种有效的方法可以同时切换多个变量的布尔值?我的变量是根据userValue显示/隐藏的行 myList = [lineA, lineB, lineC, lineD] 我下面的例子是非常硬编码的。有很多重复的代码。有没有更聪明的方法 if (userValue == 'A') { lineA.visible = true; lineB.visible = false; lineC.visible = false; lineD.visible = false

有没有一种有效的方法可以同时切换多个变量的布尔值?我的变量是根据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;
}

开关箱更好:

//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
}

您可以创建两个数组,一个是字母数组,另一个是行数组。循环遍历行数组,并将all更改为
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;

可以使用对象作为值,使用数组作为线。然后迭代并将检查结果设置为可见

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
items@luther我错过什么了吗?它正在为所有没有实际值的项目设置
false
。我们不知道项目的当前状态。条件总是返回
true
false
。旧状态将被此值覆盖。
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);