Javascript 如何一次切换多个值/列表中的值?
有没有一种有效的方法可以同时切换多个变量的布尔值?我的变量是根据userValue显示/隐藏的行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
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);