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

时间:2019-06-05 09:08:49

标签: javascript logic

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

4 个答案:

答案 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);