是否有一种有效的方法可以一次切换多个变量的布尔值?我的变量是要根据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;
}
答案 0 :(得分:2)
使用开关盒会更好:
//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
}
答案 1 :(得分: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
答案 2 :(得分:1)
您可以创建两个数组,一个字母数组和第二个行数组。遍历线阵列并将其全部更改为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;
答案 3 :(得分:1)
您可以使用一个对象作为值,并使用一个数组作为线。然后迭代检查结果并设置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);